Автоматические сценарии и результаты последнего запуска ↗

BATUMI / TRAVEL
Открыть работающий сайт ↗
План проекта · обновлено 18 октября 2026

Живой план
Батуми

Здесь видно, что уже работает, что делаем сейчас и какие варианты выбраны. Нажмите на этап, чтобы раскрыть детали; кнопки ниже фильтруют дорожную карту.

Источник статусов — фактически реализованные и проверенные сценарии в репозитории.

18 ОКТЯБРЯ 2026 · ТЕКУЩИЙ ЭТАПКабинеты обновлены — ручная приёмка открыта

Исправлены вход по ролям, навигация, фильтры заявок, редактор экскурсий, карточки и финансовые формы. Краткий отчёт и проверки → · Функции кабинетов →

24 ручных сценария, аккаунты и протокол →. Ваши отметки сохраняются отдельно от автоматических тестов.

Банк, сообщения и окончательные бизнес-условия требуют подключения владельца. Рабочая версия — batumi.mdmatvey.com. Фотографии услуг поставщика остаются отдельным пунктом плана.

История предыдущих проверок

Кабинеты — 15 октября: единое меню, настоящие вкладки, компактная CRM, отдельные кабинеты гида и поставщика, QR в карточке партнёра. Функции каждого кабинета и порядок проверки →

Прежний этап

Проверка интерфейса: исправлены подборки и карточки без фото, пояснения в кабинетах, поля и таблица CRM. Повторный обход: 96 страниц/состояний, 768 сочетаний ширины и темы. Отчёт прежнего обхода и скриншоты ↗

Личный кабинет: отдельная заметная кнопка в шапке, доступная без раскрытия меню на телефоне и iPad. Проверены 64 сочетания ширины, темы, языка и браузера, переходы гостя и туриста. Интерфейс: исправлены отступы форм и карточек, шапка и навигация кабинетов на телефоне/iPad. Палитра сохранена. Проверка вёрстки и скриншоты ↗

S10 · Можно начинать ручную проверку

Единый сайт разработки и ручной приёмки — batumi.mdmatvey.com; восемь тестовых аккаунтов готовы. На 390px проверены входы, профиль → две брони → оператор → пробная оплата/возврат и гид → поставщик. QA-приёмка: кейсы, аккаунты и протокол ↗

Отдельный запуск 4 октября: 308 юнит-тестов, 136 сценариев PostgreSQL и 40 проверок пользовательских сценариев и страниц. Результаты и связь с 24 ручными QA-кейсами ↗ Также проверен полный production mobile, RU/EN банковский сценарий с имитацией, SSR3 и очистка кэша4. Повторные ошибки банка создают одну задачу оператору, восстановление её закрывает. GitHub hosted CI остановлена оплатой/лимитом аккаунта; независимые проверки не называются зелёной CI. Реальные банк, сообщения, бизнес-условия и запуск на будущем сервере остаются долгами. Сверка заказа продолжается: отдельный незакрытый пункт — фотографии услуг поставщика. История прежних проверок сохранена.

Дорожная карта

Статус проекта, а не личный список задач.

S10В работе

Сверка заказа и приёмка

На batumi.mdmatvey.com подготовлены восемь аккаунтов для ручной проверки. 24 QA-кейса включают предложение гида, отказ, исправление и публикацию. Тестовые программы проходят обычные сервисы, у каждого исполнителя есть вход, рейтинги выводятся из одобренных отзывов.

Что проверять и что открыто

Профиль туриста → повторная бронь → оператор → пробная оплата/возврат; партнёрские баллы и гид → поставщик. Исправлен пропуск задач при банковских сбоях. Отдельно открыты фотографии услуг поставщика: общая загрузка медиа не закрывает этот пункт заказа.

Ручная QA-приёмка и результаты ↗

S1✓ Готово

Фундамент

Монорепозиторий, API, база, авторизация персонала, инфраструктура и CI.

Что сделано

Миграции и сиды, health, тесты, Docker и деплой. Better Auth подключён к сценарию админки в S2.

S2✓ Готово

Каталог и доступность

Экскурсии, расписание, поиск, страницы каталога, карта и мобильная админка.

Что сделано

Публикация экскурсии из /admin, фотографии в S3-совместимом хранилище, полнотекстовый поиск, слоты по часовому поясу Батуми. Фото в трёх размерах WebP и загрузка/публикация видео готовы. Для запуска нужны реальные медиа.

S3Код готов · владельцу

Бронирование

Гость бронирует место; оператор подтверждает или отклоняет; гость видит историю и отменяет заявку.

Готово и осталось

Готово: гостевая бронь и кабинет туриста RU/EN с регистрацией, зашифрованным профилем, автоподстановкой контактов и списком своих заявок; шифрование контактов, снимок цены, защита от двойного клика и овербукинга, очередь оператора, ссылка на историю, самостоятельная отмена с возвратом места, журнал общения, настраиваемое окно бесплатной отмены и переназначение гида с историей.
Осталось: юридический текст и окончательные бизнес-значения. Ступени возврата уже редактируются и сохраняются снимком. Отправка ссылки по email относится к S4; онлайн-возвраты — к S6.

S4Код готов · владельцу

Уведомления и отзывы

Email-события заявки, напоминания за 24 и 2 часа, календарные ссылки, отзывы гостей и модерация.

Готово и осталось

Готово: outbox и письма о новой заявке, подтверждении, отказе, отмене и смене гида; напоминания с защитой от дублей и тишиной 22:00–08:00 по Батуми; .ics и Google Календарь; отзыв после экскурсии с проверкой оператором; внутренние Telegram-события новой заявки и отзыва в демо-режиме; очередь задач оператору после пяти ошибок email или Telegram, отсутствующего email и сбоя воркера; WhatsApp привязан к семи событиям брони; переход WhatsApp → email → задача оператору с окнами 15/30 минут; проверка подписи webhook Meta и отдельные статусы приёма/доставки/прочтения.
Осталось: ключ и подтверждённый домен для реальной email-отправки, бот и чат для реального Telegram, Meta token/номер/app secret, настройка webhook и одобренный utility-шаблон WhatsApp. Реальная доставка требует внешних доступов; демо ничего не отправляет.

S5 · R1Код готов · владельцу

Витрина и партнёры

Контентные страницы, партнёрские ссылки и QR, SEO, RU/EN. Первый продаваемый релиз с оплатой офлайн.

Готово и осталось

Готово: редактор текста, FAQ и кнопок; порядок блоков, RU/EN страниц, предпросмотр, черновик и отдельная публикация; защита от конфликта правок; sitemap опубликованных URL, canonical, hreflang и JSON-LD; подборки главной с выбором и порядком экскурсий, черновиком и публикацией; FAQ из редактора страниц; партнёрские ссылки/QR и атрибуция на 30 дней; кабинет со счётчиками, создание аккаунта и отзыв доступа; публичная карта точек с отдельной публикацией адресов; преимущества главной из CMS и лента одобренных отзывов; мобильный бюджет и аудит Lighthouse; полный RU/EN интерфейс, включая поиск, календарь, бронь и отмену, с сохранением фильтров и гостевого доступа; RU/EN обложки и метаданные ссылок для мессенджеров. Демо закрыто от индексации.
Главная RU · Главная EN · Карточка RU · Карточка EN.
Обложка ссылки RU · Обложка ссылки EN.
Также готово: загрузка фото с поворотом, удалением метаданных, тремя размерами WebP и выбором под экран. Реальная загрузка с телефона и удаление всех вариантов из MinIO проверены.
Осталось: hero-видео после получения реальных медиа, повторный замер с реальными фото и видео, редакционная проверка реальных текстов и переводов. Для запуска нужны реальные тексты и фотографии.

S6Код готов · владельцу

Деньги и онлайн-оплата

Предоплата платформе, промокоды, платёжный канал, возвраты и учёт денег.

Готово и осталось

Реализован первый срез: редактор правил предоплаты и промокодов; расчёт целыми суммами, предварительная проверка цены, снимок в брони, атомарные лимиты и приоритет партнёрского кода. Проверено на демо: 188 тестов, атомарные лимиты, права доступа и мобильный сценарий.
Добавлен следующий срез: пробная оплата/отказ/retry, возвраты, сверка и неизменяемый леджер; 196 тестов и 14 сценариев PostgreSQL. Опубликовано; на экране 390px проверены гостевой RU и кабинет EN, оплата/отказ/retry/возврат и журнал.
Опубликованы начисления: ADMIN задаёт изменяемые доли, рассчитывает и подтверждает распределение онлайн-оплаты завершённой заявки. Гид и поставщик видят только свои организации. Дубли и устаревший расчёт отклоняются; частичный и полный возвраты добавляют корректировки по исходным долям.286/91 и production-mobile390 прошли. Это не учёт неподтверждённых наличных и не погашение отдельного B2B-счёта.
Взаиморасчёты · Мои начисления.
Опубликован реестр выплат: подготовка резервирует доступную сумму, отмена освобождает её; ADMIN отмечает уже выполненный внешний платёж с датой и основанием. Возврат отменяет подготовленные выплаты, сохраняет исполненные и показывает возможный долг. Своя история доступна гиду/поставщику без внутреннего основания.289/98 и production-mobile390 прошли.
Реестр выплат · Мои выплаты.
Опубликованы баллы: награда за подтверждённую оплату и корректировки успешных возвратов по исходному снимку. Своя история партнёра по текущему членству. Реальные размер/единица/политика не заданы; вывод в деньги вне заказа.293/106 и production390 прошли. Правила баллов · Мои баллы.
Опубликован аудит ADMIN: UTC-фильтры, ссылки на объект и неизменяемая история метаданных без частных снимков.294/111 и production390 прошли. Журнал аудита.
Опубликован код BOG Payment Manager: явный режим, raw RSA callback, сверка и hosted checkout; устойчивые order/refund ID, восстановление потерянного ответа и сбоя до подготовки заказа. Внешний возврат не отправляется второй раз, обычные50% сохраняются; расхождение даёт задачу оператору.308/134 и production RU/EN390 с имитацией банка прошли. Реальные ключи не подключены, на сайте остаётся пробная оплата.
Долги владельца: реальные доли гида/поставщиков, правила наличных расчётов, банк и стартовые значения правил. Старые брони офлайн; новые с ненулевым правилом пока получают пробную предоплату. До реального включения банка нужны sandbox, проверка3DS/валют/возвратов и разбор пробных заявок.
Предоплата и промокоды в админке.

S7 · R2Код готов · владельцу

CRM и B2B

Рабочее место оператора, поставщики, B2B-брони, отчёты и экспорт.

Готово и осталось

Опубликовано и проверено на телефоне: таблица и канбан, фильтры и счётчики воронки, точный поиск по email/телефону без контактов в URL, аудит поиска, создание заявки оператором и индексация старых броней. 201 тест и 15 сценариев PostgreSQL.
Следующий срез опубликован, проверен на телефоне: поставщики, услуги/net-rate/слоты, B2B, одноразовое подтверждение, связанные отмены и готовность в CRM, аккаунты гида/поставщика и регистр внешних обязательств. 204 теста и 18 сценариев PostgreSQL. Подтверждение/отказ, входы и защита ссылок проверены.
Поставщики и B2B · Кабинет гида и поставщика.
Опубликовано и проверено на телефоне: отчёты по заявкам и леджеру, разрезы и безопасный CSV без контактов; 207 тестов, 19 сценариев PostgreSQL.
Отчёты и CSV.
Опубликовано и проверено на телефоне: псевдонимизация контактов/заметок и закрытие доступа по проверенному запросу туриста. 210 тестов, 21 сценарий PostgreSQL. Старые ссылки и сессии закрыты, очистка кэша доставлена. Финансовая история сохраняется.
Запросы туристов.
Долги: процедура хранения и внешние копии; реальная доставка B2B-сообщений требует подключений.
CRM оператора.

S8Приёмка на будущем сервере

Проверки и запуск

Безопасность, восстановление бэкапа, нагрузка, алерты и инструкции.

Проверки и зависимости

Реальный бэкап восстановлен в отдельную базу: баланс леджера, места и расшифровка контактов проверены, тестовая база удалена. Опубликован второй фактор: приложение-аутентификатор, резервные коды, отзыв старых сессий. Проверены подключение и оба способа входа на 390px; 215 тестов и 24 сценария PostgreSQL. Защита входа. Работают ежедневные бэкапы с ротацией, еженедельное тестовое восстановление и мониторинг каждые 5 минут; проверены восстановление и отказ на повреждённый архив. Готовы восемь инструкций на случай сбоев. Пробная нагрузка 80 запросов/8 одновременно — без ошибок. Последний мобильный бюджет версии470eb9b: 12/12;последний ограниченный тест500 читающих посетителей прошёл;50 запросов/с и полная нагрузка ещё не закрыты; внешняя доставка алертов и production PITR/внешние копии — долги подключения. Продовый эквайринг, юридические документы и приёмка требуют участия владельца.
Владелец сообщил о смене железа. Настройка текущего VPS не является продуктовым приоритетом; окончательная инфраструктурная приёмка выполняется на целевом сервере. Прежние FAIL не отменены.

S9 · R3Код готов · владельцу

Кабинеты гида и поставщика

Самообслуживание, календарь и самостоятельное бронирование услуг.

Готово и осталось

Опубликовано и проверено на телефоне: кабинет гида — свои профили/языки/стаж, назначенные программы, календарь и заявки. Контакты после подтверждения до окончания поездки +30 дней, просмотр с аудитом. Проверены чужой профиль 404, деньги 403, языковое ограничение. 245 тестов и 64 сценария PostgreSQL. Кабинет гида.
Также готово: недельное расписание и занятые дни, создание программ через модерацию ADMIN и ответы на отзывы выполнены. Google Calendar: код и пробный мобильный сценарий выполнены; выбор до 10 календарей с отдельными пробными источниками выполнен; реальный OAuth ожидает подключения владельцем.

Последняя серия на версии470eb9b: Lighthouse12/12 проходят неизменные бюджеты. Внешний генератор:500 читающих сессий PASS —1500 ответов200,0 ошибок,p95=501мс;50 запросов/с FAIL —946 ответов200,55 пропусков,p95=1647мс. На сервере приложения50rps тоже FAIL:982 ответа200,19 пропусков,p95=980мс. История сохранена; причина ограничения не установлена. Выбран вариант2 процессов витрины; отдельный генератор запускается вручную. Мобильный путь RU/EN с отказом, повторной оплатой, отменой, возвратом, экспортом и отзывом сессии проверяется вCI. Реестр выплат и партнёрские вознаграждения опубликованы; следующая разработка — адаптер BOG Payment Manager. Нагрузочная приёмка — на будущем целевом сервере.

Выбранные решения

Выбор зафиксирован; варианты показаны для контекста.

Выбрано · ADR-032

Инфраструктура

Yandex Cloud для прода

Демо пока работает на Coolify и MinIO. Переезд в Yandex Cloud — отдельный этап перед запуском.

Выбрано · ADR-033

Карты

OpenStreetMap сейчас

Кнопка Google Maps остаётся для маршрута. Встроенный Google Maps можно включить позже с ключом.

Выбрано · ADR-034

Админка

Раздел /admin на том же сайте

Подходит для работы с телефона; отдельная панель Refine не используется.

Выбрано · ADR-030

Подтверждение заявки

Вручную оператором

Автоэскалации и SLA пока нет. Мгновенное подтверждение не включено.

Выбрано · ADR-029

Деньги R1 → R2

Сначала офлайн, затем предоплата платформе

При онлайн-оплате остаток турист передаёт гиду на месте. Реестр отмечает выполненные вручную внешние выплаты; сервис сам не отправляет банковский перевод. Реальные доли ещё не заданы.

Реализовано · ADR-044

Банковская оплата

Hosted checkout · automatic capture

Актуальный API того же банка взамен deprecated iPay. Карта вводится на стороне банка; redirect не подтверждает оплату. Источник статуса — подписанное событие или receipt. Включение явное, сейчас сохраняется mock. Наличные и бизнес-доли автоматически не назначаются.

Выбрано · ADR-011

Экскурсия и гид

Программа платформы, гид — исполнитель

На одну экскурсию можно назначить нескольких гидов; турист выбирает доступного.

Выбрано · модель партнёров

Источник бронирования

Последний партнёрский переход · 30 дней

Прямой заход сохраняет источник. При создании заявки он фиксируется снимком; повтор запроса его не меняет. Ручной партнёрский промокод имеет приоритет.

Реализовано · ADR-036

Языки витрины

Русский / · English /en

Язык выбирается адресом. Переключение сохраняет поиск, фильтры, UTM и доступ к заявке; язык экскурсии выбирается отдельно. Языки реального запуска ещё требуют подтверждения.

Реализовано · ADR-037

Кабинет туриста

Профиль и свои брони в R1

Вход по email и паролю. Контакты подставляются в новые заявки; старые гостевые брони по совпадению email не привязываются. Гостевое оформление сохраняется.

Выбрано владельцем · 04.10.2026

Тестовые данные

Обычные владельцы, права и модерация

Программы платформы, отдельные аккаунты исполнителей, предложение гида → ADMIN → публикация и аудит. Страницы/подборки — через CMS; услуги — у поставщика. Рейтинги только из одобренных отзывов. Данные вымышленные, внешние подключения пока в долгах.

Временно · ADR-031

Отмена

48 часов до начала

Это рабочий дефолт. Правила редактируются в админке и фиксируются в новых бронях; окончательный юридический текст ещё впереди.

Ещё нужны решения

Открытые вопросы не помечены как выбранные.

Доли и наличные расчёты

Реальные проценты гида и поставщиков по экскурсиям, получатели и порядок расчётов с наличными. Технические правила готовы, исходные значения не выбраны. Реальные переводы не включены.

Нужно решение владельца
Стартовые значения предоплаты

Процент или фиксированная сумма и значение по умолчанию для экскурсии.

Открыто · Q4
Валюта первого запуска

GEL, USD или EUR. Демо в GEL не является окончательным выбором.

Открыто · Q7
Условия отмены и возврата

Точный текст, no-show и компенсация, если экскурсию отменил гид.

Временный дефолт · Q5–Q6
Банк и юридические условия

Эквайринг, документы и допустимое размещение персональных данных перед продом.

Открыто · Q1–Q3, Q23–Q24
Контент и валюта

Реальные тексты и медиа, валюта витрины и подтверждение языков запуска.

Открыто · Q7, Q14, Q16

Варианты оплаты

Российские и зарубежные карты → зарубежный счёт. Комиссии, выплаты и ограничения со ссылками на источники. Провайдер пока не выбран.

Сравнить варианты ↗ · Реестр проверки рынка ↗

Долги для работы за компьютером

Собираем здесь всё, что требует владельца. Разработка независимых частей продолжается.

WhatsApp · подключение Meta

Верификация Business, номер, token и app secret; одобрение utility-шаблона с тремя параметрами; подписка messages на webhook. Код маршрута и проверка подписи готовы, демо MOCK.

Нужен владелец · доступы и модерация
Email и внутренний Telegram

Resend API key, домен отправителя и DNS; Telegram-бот и ID чата. После подключения — реальная проверка доставки. Код подтверждения email и восстановления пароля выполнен; реальная доставка ожидает подключения.

Нужен владелец · доступы
Банк, деньги и правила

Договор и sandbox-ключи BOG Payment Manager (iPay deprecated), реальные банковские проверки, стартовая предоплата, валюта, размер баллов за бронь/участника и политика их возврата, реальные доли гида/поставщиков, наличные расчёты и окончательные условия отмены. Разработка идёт на тестовом канале и изменяемых настройках; ответы не подменяются дефолтами.

Нужен владелец · Q1–Q7
Контент, юрист и прод

Реальные тексты/фото/видео и проверка переводов; Terms/Privacy; доступы Yandex Cloud и подтверждение размещения данных. Индексация демо отключена до запуска.

Нужен владелец · материалы и доступы
Google Calendar · реальный OAuth

Создать приложение Google Cloud, согласовать scopes и экран согласия, добавить client ID/secret и callback URI. Затем проверить настоящий импорт/экспорт, отзыв разрешения и отключение.

Код иmock проверены
Администратор · 2FA

Подключить TOTP и сохранить резервные коды владельца. После проверки включить обязательный второй фактор. Тестовые доступы уже отозваны.

Нужно действие владельца
Резервные копии и алерты продакшена

Настроить внешнюю копию/PITR и адрес доставки алертов. Локальные backup/restore/monitor демо работают; настоящая внешняя доставка не проверена.

Для запуска

Единый сайт разработки — batumi.mdmatvey.com

04.10.2026: исправлено ошибочное разделение ручной приёмки по двум доменам. Все QA-аккаунты, экскурсии, поставщик, партнёрский переход и модерация доступны на batumi.mdmatvey.com. Существующие данные сайта сохранены. Пароль и ссылки — в QA-инструкции. Старые автоматические результаты относятся к своим датам; ручные отметки не менялись.

Проверенные результаты

История приёмки по функциям.

Показать завершённые работы и выбранные решения

Ответы гидов на отзывы — выполнено

Гид отправляет ответ на проверку. ADMIN/OP публикует или отклоняет с причиной. Правка вновь скрывает ответ до модерации. Проверено с телефона 390px; 228 тестов и 29 проверок БД. Расписание и занятые дни также выполнены.

Расписание гида — выполнено

Недельные выезды, занятые дни и открытие дней. Бронирования защищены от удаления времени и уменьшения мест. Мобильный сценарий проверен: сохранить → закрыть → открыть → забронировать → запретить закрытие. 232 теста, 32 сценария PostgreSQL. Новые программы гидов с модерацией также выполнены.

Новые программы гидов — выполнено

Гид описывает программу и отправляет её на проверку. ADMIN возвращает с причиной или явно задаёт цену и создаёт неопубликованный черновик. Выбрано: программа платформы, цена и публикация у ADMIN. Мобильный цикл проверен, 245 тестов и 64 сценария PostgreSQL. Подтверждение email/восстановление пароля выполнены; далее синхронизация календаря и оставшиеся задачи.

Email аккаунта и восстановление — выполнено

RU/EN: подтверждение адреса, новый пароль, отзыв прежних сессий. 2FA сохраняется. Ссылки зашифрованы в очереди и очищаются после использования/срока/privacy. Мобильный сценарий проверен; 245 тестов и 64 сценария PostgreSQL. Настоящие письма/DNS и обязательная верификация ожидают подключения владельцем.

Обработка фото — выполнено

Выбрано: WebP в размерах до 480/960/1600 по большей стороне, без увеличения. Старые фото поддерживаются. 238 тестов, 41 сценарий PostgreSQL и реальный мобильный сценарий загрузки/показа/удаления в MinIO прошли. Повторная очистка после сбоев выполнена, проверена в MinIO. Исторические файлы без DB записи ждут отдельной сверки. Защита гида от пересечений разных поездок опубликована; Lighthouse TBT ещё не закрыт.

Пересечения поездок гида — выполнено

Разные выезды одного гида не могут пересекаться. Места общей групповой поездки остаются доступны; соседние поездки допускаются. Проверены одновременные заявки 201/409, полночь, снимок длительности и смена занятого гида. Живой календарь на 390px скрывает занятое время и открывает после отмены. 238 тестов и 44 сценария PostgreSQL прошли. Google Calendar: код готов и проверен в пробном режиме; реальное подключение OAuth потребует владельца.

Google Calendar — код готов, подключение отложено

Выбрано: основной личный календарь читается только как интервалы занятости; поездки отправляются в отдельный календарь Batumi Travel, одна запись на группу, без контактов туристов. Проверены с телефона 390px подключение пробного календаря, занятость → запрет брони → снятие занятости → бронь → подтверждение → экспорт → предупреждение о конфликте → отключение. Настоящая доставка Google ещё не проверена. 245 тестов и 64 сценария PostgreSQL прошли.

Технические долги: выбор вторичных календарей, очистка оставшихся пустых календарей при обрыве процесса, пакетный экспорт сверх1000 строк выполнен. Выбор замены поставщика выполнен. Уведомления B2B выполнены на демо. Далее: hero-видео, очистка медиа после сбоев и оставшиеся проверки запуска.

Замена услуги поставщика — выполнено

Выбрано: гид видит новую цену и явно создаёт одну заявку. Автоматической покупки нет. Проверено на телефоне 390px: отказ → цена 100/140 GEL → выбор → новая заявка → отмена и освобождение мест. 245 тестов и 64 сценария PostgreSQL прошли. Уведомления B2B и операторская обработка недоставки выполнены на демо.

Уведомления B2B — выполнено на демо

Выбрано: контакты задаёт организация; WhatsApp ждёт подтверждения доставки, затем email и отдельная задача оператору. Закрытие задачи не подтверждает услугу. Мобильный цикл 390px прошёл: контакты гида → пробные статусы → задача оператора → действующая ссылка → закрытие задачи → отказ поставщика. 245 тестов и 60 проверок PostgreSQL прошли. Реальные Meta/Resend и одобренный шаблон остаются в долгах владельца. Повторная очистка файлов после сбоев выполнена. Hero-видео выполнено. Сейчас: S8 — права доступа, CSP и проверки запуска.

Очистка файлов после сбоев — выполнено

Выбрано: ключи записываются до загрузки, удаления повторяются из постоянной очереди. Активные и общие фото защищены. 245 тестов и 64 сценария PostgreSQL прошли. В настоящем MinIO проверены прерванная загрузка, сбой удаления и повторный запуск; файлы удалены, живые сохранены. Мониторинг обновлён и показывает норму. Отдельный технический долг: сверка исторических файлов без DB записи. Hero-видео реализовано и проверено; реальный ролик — долг владельца.

Видео главной — выполнено

Выбрано: загрузка ADMIN в черновик, отдельная публикация по региону, тихий H264 и WebP постер, отложенная загрузка. На 390px проверены загрузка, закрытый черновик, reduced motion, play/pause, публикация, streaming и запрет оператору. 258 тестов и68 сценариев PostgreSQL прошли. Для главной Батуми нужен настоящий лицензированный ролик; тестовый регион изолирован. S8: матрица доступа и CSP выполнены; нагрузка и производительность остаются.

S8: права доступа и CSP — выполнено на демо

70 сочетаний маршрутов и ролей, чужие данные, отзыв доступа и лимиты проверены настоящими HTTP запросами. Всего73 сценария PostgreSQL и258 тестов прошли. Девять мобильных страниц RU/EN работают с CSP; добавленный скрипт без nonce блокируется. Выбрано: индивидуальный nonce и HTML без общего кэша. Нагрузочная приёмка и производительность ещё не закрыты. Пакетная приватность выполнена. Далее: большие календари и оставшиеся проверки.

Приватность больших аккаунтов — выполнено

Выбрано: одна постоянная задача, немедленное закрытие доступа, обработка по50 заявок, прогресс в админке. Проверены501 заявка, сбой, рестарт и два обработчика; деньги и аудит сохраняются. На телефоне390px проверены запуск, перезагрузка, закрытая ссылка и запрет оператору; сервер завершил работу после закрытия браузера. 258 тестов и75 проверок PostgreSQL прошли. Экспорт календарей сверх1000 записей выполнен. Далее: дополнительные календари и проверки запуска.

Повторный аудит: медианы TBT116/116.5мс на главной и176.5/163мс на экскурсии RU/EN. Один из12 замеров ещё не прошёл бюджет — неудачный замер сохранён. Производительность остаётся открытой.

Большие календари — выполнено

Выбрано: сохранённая позиция,100 групп за чтение и20 изменённых событий за проход. Проверены2001 бронирование в1001 группе, перезапуск и ошибка410 без пропуска. На 390px: подключение21 группы → первая порция20 → автоматическое обновление21 → перезагрузка → отключение. 258 тестов и77 PostgreSQL сценариев прошли. Google OAuth и настоящий тест провайдера остаются в долгах владельца. Следом: выбор дополнительных календарей.

Дополнительные календари — выполнено

Выбрано: до10 источников, только занятость, зашифрованные идентификаторы; календарь поездок исключён. Новые заявки закрыты до свежей синхронизации после изменения выбора. На 390px проверены отдельные источники, объединение выбранных календарей, сохранение после перезагрузки и очистка одного без потери другого. 262 теста и80 PostgreSQL сценариев прошли. Реальные доступы Google остаются в долгах владельца.

Сверка хранилища — выполнено

Выбрано: приватный отчёт, без удаления неизвестных файлов. Проверены живые оригиналы и варианты даже при устаревшем статусе удаления; неизвестный объект отмечен отдельно. После очистки собственных тестовых файлов полный обход текущего хранилища не обнаружил оставшихся объектов. 265 тестов прошли; реальные фото каталога пока внешние, загруженные файлы появятся после наполнения владельцем.

Восстановление календаря — выполнено

Выбрано: постоянная попытка создания и поиск по точному marker после сбоя, без повторного создания дубликата. Проверены потерянный ответ, рестарт и последующее принятие того же календаря. На 390px проверены сообщение ожидания и автоматическое обновление; внешний Google заменён тестовым транспортом. 269 тестов и81 сценарий PostgreSQL прошли. Реальный OAuth, старые календари без marker и случаи запроса, не дошедшего до провайдера, остаются в списке подключения и разбора владельцем.

Защита журналов ошибок — выполнено

Выбрано: метод, шаблон маршрута и статус; значения URL, заголовки, тексты ошибок и stack trace не записываются. Настоящий HTTP тест с тестовыми токеном и контактами подтверждает отсутствие значений в captured logs и ответе500. Служебное создание сотрудников тоже не печатает email и произвольные ошибки. 272 теста прошли. На 390px повторно проверены девять страниц RU/EN, вход и CSP без ошибок.

Проверка навигации и производительности

Эксперимент с обычными ссылками проверен на390px и отменён: ускорение не подтверждено. Все12 результатов сохранены, пороги не повышены. Неудачный замер. Производительность остаётся в работе; прежняя навигация восстановлена и опубликована.

Лимиты посетителей — исправлено

Выбрано: доверие только локальному прокси, отдельный бюджет каждого посетителя и короткий кеш данных видео с очисткой при публикации. ПодставнойIP не принят в настоящей цепочке Traefik → Next → API. 273 теста и82 сценария PostgreSQL прошли. После50 запросов/с данные видео доступны200. Нагрузка ещё не пройдена:892 запросa200,109 пропущенных запусков,p95=2.51с при пороге1.5с. Результат сохранён без повышения порогов.

Полный реестр прав API — выполнено

Выбрано: фиксированная политика всех175 маршрутов, проверка с настоящими cookies шести ролей. Проверены751 отказ по роли/сессии и162 отказа для операций с чужим или отсутствующим Origin. Общая проверка сессии закрывает обнаруженный пробел CMS, партнёров и задач оператора. 273 теста и83 сценария PostgreSQL прошли. Это дополняет функциональные тесты, а не заменяет независимый пентест. Производительность и нагрузка остаются в работе.

Зависимости и образ — обновлено

Выбрано: согласованные обновления Nest11/Express5/Vitest4, production dependencies отдельно от сборки, проверка audit/Trivy вCI и еженедельные предложения Dependabot. Полный audit0 advisories; готовый образ прошёл gate исправимыхhigh/critical без исключений. npm/Corepack и прямойVitest убраны из рабочего слоя, миграции/сиды/API работают. 273 теста,83 PostgreSQL сценария и мобильные RU/EN/CSP проверки прошли. Это не гарантия отсутствия неизвестных уязвимостей. Далее: два процесса витрины и оставшаяся приёмка нагрузки.

Переводы и форматирование витрины — выполнено

Выбрано: переводы только нужного раздела, серверные ссылки без дополнительного await и повторное использование форматтеров. На 390px проверены RU/EN календарь → время → контактная форма, вход/восстановление/партнёры и гостевые экраны; CSP работает. 12 замеров:10 прошли,2 превышенияTBT сохранены — неудачный замер. МедианыTBT106.5/116.5мс главная,190.5/173.5мс экскурсия. Нагрузка973 HTTP200,p95=1.465с,28 пропусков — ещё не пройдена. Далее: два процесса витрины с согласованной очисткой кэша и проверка зависимостей.

Два процесса витрины и безопасное обновление — опубликовано

Выбрано: два локальных Next-процесса, Nginx, общая API/БД и подтверждение очистки кэша обоими процессами. Проверены HTTP200 RU/EN, CSP, подменаIP, перезапуск после аварии и повтор очистки. Неудачное обновление автоматически возвращает предыдущий контейнер; проверено на отдельном стенде.274 теста и83 PostgreSQL сценария прошли, мобильные сценарии работают. Нагрузка ещё не пройдена:50rps975 ответов200/26 пропусков/p95=1.14с;500 читателей — превышениеp95, полный первый и повторный результаты сохранены. Экспорт данных из кабинета туриста опубликован; календарь ниже первого экрана оптимизируется.

Экспорт собственных данных туриста — выполнено

В кабинете RU/EN есть подготовка и скачивание JSON: профиль, свои заявки и контакты, отзывы, оплаты и возвраты. Выбрано: порции по100 и сборка файла в браузере без открытого архива на сервере.501 заявка проверена без дублей и потери точности денег; чужие/гостевые заявки не присваиваются. На 390px действительно скачаны RU/EN файлы со101 заявкой, проверены ошибка второй порции и успешный повтор без частичной выгрузки.279 тестов и84 PostgreSQL сценария прошли. Тестовые доступы и данные очищены.

Отложенный календарь и мобильная скорость — проверено

Выбрано: календарь загружается при приближении к бронированию или нажатии; цена и кнопка доступны сразу. RU/EN390px, повтор после ошибки загрузки и отсутствие IntersectionObserver проверены. Все12 Lighthouse замеров прошли бюджет; медианыTBT115/96.5мс главная и153.5/123мс карточка RU/EN.500 читателей:1500 HTTP200,0 ошибок,p95=361мс — ограниченная проверка чтения прошла.50rps:987 HTTP200,p95=776мс,14 пропусков — FAIL; повтор pre80 тоже FAIL. Денежная нагрузка и реальный контент ещё требуют проверки.279 тестов и84 PostgreSQL сценария прошли; пороги неизменны.

Явные подключения рабочего образа — выполнено

Выбрано: конфигурация в приватном файле вне исходников; образ сам не содержит доступов к демо-базе и MinIO, сиды по умолчанию выключены. Прежние ключи перенесены без изменения: пять существующих зашифрованных записей читаются до и после обновления. Четыре проверки переноса и CI279/84 прошли; RU/EN390px и CSP повторно проверены. Публичный минутный нагрузочный запуск сохранил12 пропусков — нагрузочная приёмка остаётся открытой. Постоянный мобильный автотест полного пути туриста выполнен следующим срезом.

Полный мобильный путь туриста — автотест выполнен

Выбрано: Playwright на390×844, RU/EN и обычный production image с отдельной пустой базой, новыми тестовыми ключами и MOCK-провайдерами. Профиль заполнен один раз; обе заявки используют сохранённые контакты. Проверены подтверждение оператором через API, пробная оплата, отмена, один полный возврат и нативная выгрузка JSON. Итог: четыре заявки, две оплаты и два возврата, места освобождены, ledger сбалансирован. Сценарий повторяется вCI каждойPR; временный серверный стенд и его доступы удалены. Дополнительно на отдельном стенде прошёл отказ оплаты → возврат штатной кнопкой → новый intent → успешный повтор; отказ не создаёт проводок/возврата, места удерживаются до решения. Следующая проверка: нагрузка50 запросов/с. Это не проверка настоящего банка или500 браузеров.

Одновременные публичные запросы — опубликовано и проверено

Выбрано: объединять только незавершённые одинаковые GET публичного каталога; дополнительного срока кэша нет, ответы независимы. На отдельном стенде40 страниц сократили обращения с10–12 до двух на ресурс; nonce каждого HTML различен. Очистка кэша при публикации закрывает прежние незавершённые запросы для новых читателей. CI280/84 и полный мобильный RU/EN путь оплаты/отказа/повтора/возврата прошли. Все12 Lighthouse замеров опубликованной версии проходят бюджет. Нагрузка остаётся открытой:50rps984 HTTP200/16 пропусков/p95=1.02с;500 читателей —40 ошибок/p95=4.60с. Все результаты сохранены; ускорение страниц не заявлено. Далее: проверка ёмкости процессов рендера с контролем ресурсов.

Количество процессов витрины — проверено, выбран вариант2

Доступны только2/3/4 процесса, один API и согласованная очистка кэша всеми процессами. CI281/84 прошёл: рабочий образ с3 и полный мобильный сценарий с4 процессами. Непубличные HTTPS тесты2/3/4 не прошли нагрузочные пороги; увеличивать число процессов на текущем хосте не обосновано. Выбрано: оставить2. Все результаты сохранены, стенд и доступы удалены.50rps и500 читателей остаются открытыми критериями.

Текущая публичная приёмка и hero JSON

Опубликован корректный JSON null при отсутствии hero-медиа; application/json/no-store и рабочий образ без встроенных доступов проверены. RU/EN390px и9 страниц CSP прошли. Последний тест500 читающих посетителей:1500 HTTP200/0 ошибок/p95=75мс — PASS ограниченного чтения.50 запросов/с:978 HTTP200/23 пропуска/p95=992мс — FAIL. Вариант буферизации на отдельном стенде тоже не прошёл; выбран прежний режим без буферизации и два процесса. Стенд и доступы удалены. Полная приёмка нагрузки остаётся открытой.

Кабинет туриста: возвращение и телефон — опубликовано

При возвращении в открытую вкладку кабинет проверяет сессию, сохраняя несохранённые поля. При выходе в другой вкладке закрытые данные убираются. Исправлена нативная проверка телефона: буквы и короткий номер отклоняются до отправки, пустой телефон остаётся допустимым. Полный CI281/84 и мобильный RU/EN сценарий прошли: старая cookie200 до выхода и четыре401 после, карточка закрывается, повторный вход возвращает исходный профиль и обе заявки. Пробные деньги, места и возвраты проверены. В тесте событие возвращения доставляется явно; переключение окон ОС и BFCache каждый раз не заявляются. Рабочая версия и9 страниц CSP/390px проверены.

Повторные публикации каталога — опубликовано

Исправлена повторная очистка тегов Next: каждое изменение обновляет данные во всех процессах. Выбрано: патч установленной версии Next, без изменения TTL, общего HTML кэша или защиты CSP. CI282/84, два последовательных обновления каталога на4 процессах, восстановление исходного заголовка и полный мобильный RU/EN сценарий прошли. Опубликованная версия470eb9b проверена на390px и9 страницах CSP. Свежий мобильный бюджет: 12/12. Нагрузка50 запросов/с:982 HTTP200,0 ошибок,19 пропусков,p95=980мс — FAIL;500 читающих сессий:1500 HTTP200,0 ошибок,p95=72мс — PASS ограниченного чтения. История сохранена, полная нагрузочная приёмка открыта.

Отдельный генератор нагрузки — выполнено

Выбрано: ручной GitHub workflow с неизменёнными публичными сценариями, без ключей и записей в БД; отчёты обоих тестов сохраняются, нарушения дают FAIL. Первый внешний запуск37070467445:50 запросов/с —946 HTTP200,55 пропусков,p95=1647мс, FAIL;500 читающих сессий —1500 HTTP200,p95=501мс, PASS. Same-host50FAIL19 пропусков и500PASS сохранены. Отдельный генератор не устранил50rpsFAIL; причина не установлена, ускорение не заявляется.12 мобильных замеров проходят бюджет, рабочий код470eb9b прежний. Полная нагрузка и внешние подключения остаются открытыми.

Начисления и возвраты — опубликовано

Правила распределения по экскурсии, предварительный расчёт, явное начисление ADMIN, счета организаций и свои суммы гида/поставщика готовы. Проверены286 unit/property,91 сценарий PostgreSQL, production SSR и мобильный390px: изменение правила после начисления, частичный возврат по старой доле, кабинет гида и полный возврат до нуля. Выбрано: удержанная онлайн-оплата, исходный снимок и округление вниз. На момент этого этапа реестра выплат и партнёрских вознаграждений ещё не было; реестр опубликован следующим этапом ниже. Реальные проценты не заданы автоматически; офлайн B2B не помечается оплаченным.

Выплаты и долг после возврата — опубликовано

Версия12fd883: подготовка и отмена выплат, ручная отметка исполнения и своя история получателя. Выбрано: отдельный счёт ручных внешних платежей, неизменяемая исполненная запись, отмена резервов и отрицательный остаток после возврата. Сервис не выполняет банковский перевод. CI37105677453:289 unit/property,98 PostgreSQL; production390 — подготовка, отмена, исполнение, повтор, права, частичный/полный возврат и отзыв доступа. На опубликованной версии проверены образ без встроенных доступов, runtime600, две закрытые страницы/дваAPI401,9 страниц CSP и RU/EN390 без записи реальных заявок. На этом этапе следующими были баллы партнёра, опубликованные ниже.

Баллы партнёров — опубликовано

Версияdd7fdc6, CI37109416464:293/106 и production390. Выбрано технически: отдельный неденежный журнал, одна награда из атрибуции оплаты, исходный снимок и корректировки успешных возвратов. ADMIN явно задаёт размер, единицу и PROPORTIONAL/ANY_REFUND; реальные бизнес-значения не выбраны. Собственная история по текущему членству, отзыв доступа проверен. Образ/runtime600, страницы/API401, CSP9/RUEN390 проверены. Вывод баллов в деньги вне заказа.

Журнал аудита — опубликовано

Версия0f38ebf, CI37109744184:294/111 и production390. Выбрано: метаданные без частных снимков, UTC-фильтры и курсор50, SQL-запрет изменения/удаления, сохранение ID при обезличивании. Проверены страницы50/55, роли и отзыв ADMIN с очисткой открытой вкладки. Рабочий образ/runtime600, страница/API401, CSP9/RUEN390 проверены. Следующая разработка — BOG Payment Manager, подключение банка остаётся открытым. Объявление BOG о deprecated iPay.

Банковский gateway — код опубликован, подключение открыто

Версияba388f4, CI37118800500:308/134, production RU/EN390 и прежний полный мобильный сценарий прошли; SSR3, повторная очистка кэша4, Trivy и secrets прошли. Подписанный callback, потеря ответа create/refund, пропущенный callback, внешние возвраты и сбой до подготовки заказа проверены на вымышленных данных. Выбрано: явный bank mode, фиксированные API, durable attempt до HTTP, proof только локально, no-referrer, сохранение языка и исходной карточки. Рабочая публикация: образ без встроенных доступов, runtime600/no-auto-seed, закрытые страницы/API, CSP9 и RU/EN390 без создания реальных броней проверены. Реальные ключи/3DS/семантика полей BOG и юридические решения остаются открытыми; успешной sandbox-приёмкой эти тесты не являются. Прежние FAIL нагрузки сохранены; новое железо требует отдельной финальной проверки.

Снимки из отдельного тестового production-образа, только имитация банка: RU: экран оплаты · EN: экран оплаты · RU: подтверждение · EN: сверка потерянного callback.

Сверка и тестовая среда — проверено, ручная приёмка открыта

3 октября:308 unit/property,136 PostgreSQL; независимый production bank RU/EN390 и оператор390, полный mobile, SSR3/cache4, Trivy0.75.0 и Gitleaks8.30.1 прошли. Hosted CI37136553316 не стартовала: billing/spending limit. Операторская задача после пяти ошибок и её закрытие проверены реальными HTTP-запросами в имитации банка. Отдельный test-batumi: шесть ролей, собственные DB/ключи/MinIO, профиль один раз, две брони, подтверждение, пробная оплата/возврат и B2B через формы прошли. Тестовые25%/7баллов не являются бизнес-решением. Основной сайт обновлён тем же проверенным образом: рабочая миграция, runtime600/no-auto-seed, защита API, CSP9 и RU/EN390 без создания основных заявок прошли. В собственном MinIO тестовой среды проверены загрузка JPEG, чтение WebP и удаление фикстуры. GitHub billing остаётся долгом владельца. Сценарии для телефона · Задача оператору390px, только вымышленные данные.