Показать завершённые работы и выбранные решения
Ответы гидов на отзывы — выполнено
Гид отправляет ответ на проверку. 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, только вымышленные данные.