Разбор по коду, веткам, стендам и трекеру: что не начато, что начато и не доделано, что работает и требует доработок, что готово. В конце сроки, которые можно называть команде, и решения, которые ждут владельца.
Платформа собрана и работает на стендах: оба Android-приложения свёрстаны по Figma, консоль, сборщики, блог и бэкенд живут. Ни одна часть не доведена до продакшена, и почти все упираются в три вещи, которые не решаются кодом.
144 коммита и 9 миграций за десять дней лежат только на этом сервере. Прод cloud.ru собирается из кузни Gitea, куда у наших сессий нет ключа; зеркало GitHub стирает всё, чего нет в кузне. Релизная ветка 23.09 стёрта с GitHub через часы после пуша.
Оба контура cloud.ru недоступны с 24.09, причина неизвестна, алертов нет. Бэкапов базы с 36 тысячами пользователей нет, нагрузка не прогонялась, тестовый код входа открывает любой аккаунт на копии, в репозитории лежат боевые ключи.
Аккаунт Apple для «По душе» (до 5.10), домены для витрины и блога, доступы Play Console и Firebase, ключи кассы и SMS, бакет для бэкапов, юрист по 572-ФЗ, оператор для очередей Telegram и сборщиков.
Раздел SEO целиком (этап 1, принят 30–31.08). Бэкенд событий с записью, чек-ином, отзывами и репутацией. Автоимпорт из 27 площадок и Telegram-каналов. Консоль на два продукта с закрытыми замечаниями 14.09. Вёрстка обоих Android по Figma: 549 из 623 и 470 из 508 кадров.
| № | Часть | Состояние | Где сейчас | Ближайшая веха | Остаток |
|---|---|---|---|---|---|
| 01 | «По душе» iOS | начато | Перенос на Compose Multiplatform начат 24.09; Android разложен по фасадам, iOS-приложение ни разу не запускалось; аккаунта Apple под него нет | Первая сборка в TestFlight 9–15.10 | 17–35 чд |
| 02 | «По душе» Android | работает | Всё по Figma, работает на дев-стенде, сборка 24.09 у владельца; 86 карточек ждут приёмки; нет пушей, релизной подписи, удаления аккаунта | Приёмка владельцем; выкат сервера на cloud.ru | 35–50 чд, 4–6 нед |
| 03 | «По душе» Web | работает | Витрина на трёх контурах за паролем и без индексации; продуктовой работы нет с 12.08; тестов нет | Домен, затем публичный запуск | 8–12 чд + домен; до прототипа ещё 15–25 |
| 04 | «По любви» iOS | начато | 36 экранов свёрстаны, в приложении 5; остальное старый вид; TestFlight внутренний с 22.09; владелец взял iOS на себя 24.09, путь не выбран | Выбор пути: SwiftUI или Compose Multiplatform | 55–70 чд (SwiftUI) |
| 05 | «По любви» Android | работает | Полный клиент под демо и тест, 23 карточки на проверке; нет пушей, системных экранов, прогона оплаты; версия 1 с отладочным ключом | Приёмка; доступы Play и Firebase | 20–28 чд, 4–6 нед |
| 06 | «По любви» Web | заморожено | Повторяет Android по экранам, живёт только на дев-стенде, не менялся с 11.08; в роадмапе и планах cloud.ru отсутствует | Решение владельца: нужен ли | 12–18 чд при «да» |
| 07 | Админ-панель | работает | 41 раздел, замечания владельца закрыты; три стенда с тремя версиями; общий токен, аудит и удаление данных не прод-уровня | Выкат веток; персональные входы | 22–34 чд + 3–5 DevOps |
| 08 | Парсеры организаций | работает | 28 источников, 125 тысяч событий; ключи VK и Добро мертвы с 14.09, тревоги не уходят, две площадки закрыли доступ, на cloud крон выключен | Ручной вход, тревоги, выкат релиза | 18–28 чд + 4–7 DevOps; новые площадки 75–110 |
| 09 | Парсеры Telegram | работает | Сборщик и самопоиск в кроне дев-стенда; 0 из 55 карточек опубликовано; на GitHub и cloud кода нет; прокси через личный сервер | Назначить оператора; путь для прода | 7–10 чд + 2–3 DevOps |
| 10 | SEO-раздел | готово (этап 1) | Редактор, ИИ, блог, счётчик и аналитика сделаны и приняты 30–31.08; блог с одной статьёй; запуск ждёт домена | Домен и кабинеты, затем го-лайв | 3–5 чд после домена; этап 2 ещё 8–12 |
| 11 | Бэкенд и доставка кода | работает | 1 596 тестов зелёные; 144 коммита и 9 миграций только локально; кузня закрыта для сессий; пуши в мёртвую очередь; секреты в git | Влить релизную ветку в кузню | 8–14 чд + решение |
| 12 | Серверы и пайплайн | работает | Пайплайн кузня → образы → стейдж → prod-gate → ArgoCD работает у DevOps; оба контура cloud.ru лежат; бэкапов, алертов и нагрузки нет; 1 из 9 подзадач эпика закрыта | Поднять контуры; эпик LYUBVI-11 | 18–32 чд прод; +17–27 переезд |
Чел-дни (чд) это оценки остатка работы при указанных в разделах допущениях, без ожидания решений и внешних сторон. Календарные сроки собраны в разделе «Сроки».
Перенос Android-кода на Compose Multiplatform (DUSHA-100, «дорога Б») начат 24.09 и за день прошёл примерно треть пути по трудоёмкости. Android разложен по платформенным фасадам, модуль приложения стал мультиплатформенным, движок обновлён, iOS-части написаны черновиками. Само iOS-приложение ещё ни разу не собиралось и не запускалось: все 208 файлов экранов лежат в Android-части, в общей части экранов нет.
| Этап | Состояние | Доказательство | Что осталось | Оценка |
|---|---|---|---|---|
| Э0.1 Фасады: рисование, конфиг и хранилища, разрешения и фото, телеметрия, карта, «поделиться» | готово | Коммиты 188f6df5, 27dddfcb, c44a74c5, 94021476; три ручных прохода на эмуляторе со стендом | Размер экрана и инсеты (Viewport), служебный журнал, обработчик «назад» не начаты | 1 чд |
| Э0.2 Ресурсы: строки, векторы, шрифты в общий формат | идёт, не влито | 1549 строк сверены с aapt2, 108 векторов; сборка и 259 тестов зелёные; в дереве 6 правок и 2 скрипта | Закоммитить, влить (конфликт в навигации), прогнать 623 кадра бит в бит | 1–2 чд |
| Э0.3 Даты kotlinx-datetime и мелочи JVM | идёт, не влито | 9 файлов уже в общей части, 264 теста; 5 правок в дереве | Закоммитить, влить, кадры с датами | 0,5–1 чд |
| Э0.4 Сеть Ktor, картинки Coil 3, QR | идёт, не влито | Клиент и сокет чата на Ktor; 10 правок в индексе не закоммичены | Закоммитить, влить, ручной проход входа, афиши, записи, чата с фото, профиля и селфи | 1–2 чд |
| Слияние трёх помощников между собой | не начато | Один файл моделей перенесён в общую часть двумя ветками с разными правками; три стороны правят репозиторий событий и сборочный файл | Порядок даты → сеть → ресурсы, после каждого сборка и тесты, в конце полные ворота | 1–1,5 чд |
| Э1 Новый движок: Kotlin 2.4.20, Compose 1.11, AGP 8.13, Paparazzi 2.0 alpha, JDK 21 | код влит, ворота не подтверждены | 7b257a3d, 7557ba76; 255 тестов; результата полной пересъёмки 623 кадров в журнале нет | Три прогона (база, ветка, движок), разбор сдвигов текста, число красных кадров неизвестно | 1–3 чд |
| Э2 Каркас KMP: цели Android и iOS, фреймворк, expect/actual | готово | 80283fa6, 94021476; фреймворк для симулятора собирается; 10 expect в общей части, 9 actual для iOS | Нет | 0 |
| Э2 Переезд экранов в общую часть и точка входа iOS | не начато | 145 файлов без платформенных импортов, 63 с ними; файла точки входа нет, оболочка iOS его ждёт | Перенос, навигация и lifecycle от JetBrains, expect/actual для рисования, карты, камеры и телеметрии, первый запуск на симуляторе | 3–5 чд |
| Э3 iOS-части: рисование Skia, карта MapLibre за Swift-мостом, камера селфи, фото, гео, share, конфиг | черновики, проверены на стендах | Рисование: 11 сцен, расхождение до 3 уровней яркости; карта: камера совпала до цифры; остальное только компилируется | Интеграция в приложение, проверка на живом iPhone (камера, жесты), Sentry-мост, шрифты, клавиатура, диплинки | 4–6 чд + iPhone |
| Э4 Инструмент съёмки на симуляторе и сверка 623 кадров с макетом | не начато | Скрипт съёмки не умеет simctl; папок для iOS-снимков нет | Второй бэкенд съёмки, маска индикатора, diff, разбор текста CoreText, правки, отчёт | 6–12 чд |
| Э5 Оболочка iOS и конвейер TestFlight | готово на заглушке | Проект xcodegen, Info.plist, приватность, иконка из Android; симулятор прошёл, архив падает на подписи | Аккаунт Apple: идентификатор, профиль, карточка приложения, разблокированная связка ключей на макмини | 0,5 чд после «да» |
| Э6 Требования App Store: удаление аккаунта, жалоба и блокировка человека, демо-номер, 572-ФЗ, иконка, скриншоты | не начато | Сервер удаление умеет, в приложении заглушка; жалоба на человека без ручки; селфи-верификация под 572-ФЗ; векторной иконки в Figma нет | Подключить в приложении, юрист, дизайнер, настройки прода | 2–3 чд + внешнее |
Сроки на странице статуса для владельца оптимистичны. Там обещано: первая сборка в TestFlight 6–8 октября, сверенная по всем экранам 13–15 октября, 70–95 часов работы. Разбор по коду даёт: первая внутренняя сборка 9–15 октября (6–8 октября только если сдвигов текста после движка мало, помощники сливаются без сюрпризов и пункты Apple закрыты к 5 октября; пессимистично 20 октября), сверенная по 623 кадрам 24–31 октября (пессимистично 7 ноября), App Store не раньше второй половины ноября и только после юриста, демо-номера на проде и удаления аккаунта в приложении. Остаток 17–35 чел-дней, из них до первой сборки 75–150 часов. Страницу статуса стоит поправить.
Приложение целиком свёрстано по Figma и работает против дев-стенда. Идёт приёмка: 86 карточек ждут проверки владельца, ни одна не принята. До магазинов не хватает пушей, релизной подписи, удаления аккаунта и серверных выкатов на cloud.ru.
Актуальный код приложения лежит в ветке integration/dusha-bot-2026-09-24; она включает релиз 23.09, чат события (DUSHA-98), правку нагрева (DUSHA-99), панель вкладок и пачку DUSHA-101…111. На GitHub последний коммит по приложению датирован 14.09: разрыв 188 файлов.
| Область | Состояние | Доказательство | Что осталось | Оценка |
|---|---|---|---|---|
| Регистрация и онбординг (13 экранов, селфи-верификация, геопозиция, город и районы) | работает | DUSHA-45, 82, 83, 110 закрыты; гейт геопозиции и уведомлений над графом навигации | Шаг «О себе» стирается после «назад», сироты фото на сервере; тексты соглашения и политики пока рыба из макета; тестовый режим входа на прод-копии надо закрыть (DUSHA-56) | 2–3 чд |
| Афиша-лента, страницы города, категории, подборки | работает | DUSHA-35…41, 49, 52, 107, 108, 109 закрыты; догрузка списка | Подборки объявлены, ручки нет; число подписчиков категории без ручки; порядок «Завтра» только на стенде; состав «Завтра» за владельцем | 1–2 чд + сервер |
| Карта афиши, карточки места, мини-карты | работает | MapLibre с перекраской под макет, группы с фото, лист за пальцем (DUSHA-92), камера сохраняется (74), мини-карты снимками (71), SurfaceView для BlueStacks (72) | Подписи маркеров системным шрифтом, фото стопок после движения карты; мини-карты в BlueStacks владельца не проверены | 1–2 чд |
| Фильтры: радиус, календарь, интересы, «только проверенные», город | работает | DUSHA-24…26, 66, 69, 76, 90, 91, 106, 108; сервер отдаёт радиус до 100 км и разделы интересов | Смысл «Проверенных» за владельцем; вибрация бегунка проверяется только на телефоне | 1 чд |
| Поиск | работает | DUSHA-47, 64 (регистронезависимый поиск на сервере), 81 (только по названию) | Серверная часть только на стенде, cloud ждёт выката | 0,5 чд |
| Карточка события, запись, жалоба, просмотр фото | работает | Состояния кнопок по макету с тестом; DUSHA-32, 35, 38, 98 | Вопросы при записи хранятся в памяти (ручек нет); комментарий к жалобе не уходит; у 29 406 из 29 407 событий стенда запись выключена, и «Участвовать» отвечает ошибкой: продуктовый вопрос | 2–3 чд + сервер |
| Создание и управление событием: форма, фото, теги, скрытый адрес, участники, QR | работает | DUSHA-20, 28, 31, 65, 80; поля формы и фото на сервере, поиск места без привязки к Москве | Команда, роли и приглашения в приложении из заглушек в памяти (ручек нет); платное событие сервер отклоняет без уровня доверия L2 | 2 чд; сервер 5–8 или скрыть |
| Чаты событий: фото, статусы доставки, участники, открытие при записи | работает на стенде | DUSHA-84…89, 92…96, 98; сервис чатов расширен на 258 строк против GitHub | Пуши о сообщениях со стенда не уходят (нет обработчика очереди, 150 потерянных за неделю); модерация фото чатов (DUSHA-97) до прода; cloud живёт на старом сервисе чатов | 1 чд + сервер 2–3 |
| Личные чаты между людьми | не начато | Маршрут объявлен, экрана нет; вкладка «Личные» пуста; «Написать» на профиле ведёт в чат события | Продуктовое решение, сервер для «По душе» не заведён | сервер 3–5, прил. 3–4 |
| Чат с поддержкой | сделано на стенде | DUSHA-79: ручки поддержки и переписка в консоли; на GitHub их нет | Выкат на cloud; опрос раз в 10 с вместо сокета | 0,5 чд + выкат |
| Профиль, правка, настройки, «Мои события», подписки, заблокированные | работает | DUSHA-21, 51 (семейный статус), 73, 78, 103, 104, 105 | На cloud профиль не сохраняется до выката; «Похожие интересы» и подписчики без ручек; заблокированные в памяти; удаление аккаунта заглушка (требование магазинов); «Изменить фото» не меняет аватар | 2 чд; сервер 4–6 |
| Уведомления в приложении и утренний дайджест | работает на стенде | DUSHA-101, 102: обложка, переход к событию, «Прочитать всё» | Только на стенде | 0,5 чд + выкат |
| Пуши на устройство | не начато | В приложении нет FCM; разрешение на уведомления запрашивается только ради гейта | Провайдер для РФ (FCM плюс RuStore или HMS), токен, полезная нагрузка, обработчик очереди чатов | прил. 3–5, сервер 2–3, DevOps 1 |
| Скидки партнёров | начато: экран статичный | Данные из ноды макета, ручки нет по решению владельца; DUSHA-103 вёрстка и копирование промокода | Механика промокодов и QR, сервер | 3–5 чд после решения |
| «Куда иду», участие, плитка профиля | сделано на стенде | DUSHA-98 по пяти местам макета; «Мои события» = только организую | Стрелки полос афиши ведут на один экран; запись на события афиши: вопрос владельцу | 1 чд + решение |
| Связка со знакомствами: «открыт для знакомств», «N из M подходят», переход в «По любви» | не начато | В профиле статичный баннер без действия; на сервере флага и сопоставления нет | Спецификация, сервер, диплинк между приложениями; веха роадмапа m5 «демо интеграции» назначена на 04.10 | сервер 5–10, прил. 3–5 |
| Платные события и оплата | не начато | Только показ цены; SDK оплаты нет; сервер отклоняет платное событие без L2 | Модель (билеты, комиссия), провайдер и 54-ФЗ, экраны | сервер 10–15, прил. 5–8 |
| Диплинки и QR | начато | Схема podushe:// для события и пользователя, QR через ZXing | Https-ссылки требуют публичного домена (тот же блокер, что у SEO); отложенных диплинков нет | 1–2 чд после домена |
| Журнал ошибок и аналитика | встроено, выключено | Sentry SDK и перехватчик запросов есть; адрес приёмника пуст во всех сборках; GlitchTip на cloud не поднят | GlitchTip у DevOps, пересборка с адресом, загрузка mapping; продуктовой аналитики нет | DevOps 1–2, прил. 0,5 |
| Производительность и нагрев | сделано, не подтверждено на телефоне | DUSHA-99: афиша 60,6 → 26 мс на кадр, колода 32,5 → 7,8 (замер на эмуляторе) | Стекло над прокруткой и размытие чата не трогали; на каждом экране заново тянутся профиль и настройки (216 запросов за полчаса) | 1–2 чд |
| Сборка, подпись, раздача | годится для тестов, не для магазинов | Версия и код сборки по времени; релиз подписан отладочным ключом; сборка на макмини | Релизный ключ, AAB и сплиты по архитектурам (46 из 79 МБ занимает MapLibre), листинг, иконки, тексты | 2–3 чд + материалы |
| Планшеты и крупный шрифт | решение принято, риск для Play | Кадр вписывается с центровкой, системный шрифт зажат | Play не любит леттербокс на планшетах, зажатый шрифт ломает доступность; отдельное решение владельца | 3–5 чд при решении |
Главный риск: единственная копия сентябрьской работы лежит на этом сервере. 102 коммита сверх main нет ни на GitHub, ни в кузне; страховка в бандлах на макмини сделана 18 и 23.09, ветки 24.09 в неё не входят. Пока цепочка «кузня → GitHub → cloud.ru» не работает, ни одна серверная правка с 15.09 до прода не доедет. Учёт тоже разошёлся: DUSHA-65 и 70 стоят «В работе», хотя сделаны и в сборках с 22.09.
Остаток до «готово к магазинам»: 35–50 чел-дней, 4–6 недель при параллельной работе. Android 15–22 дня (приёмка 86 карточек и переделки, пуши, удаление аккаунта, подпись и листинг, регресс на трёх телефонах), сервер 12–20 (выкаты, пуши, блок-лист, модерация фото чатов, данные), DevOps 5–8. Без оплаты, связки со знакомствами и личных чатов. Добавки: оплата +3–4 недели, связка +2–3, личные чаты +1,5–2, планшеты +1.
Витрина на Nuxt с серверным рендером живёт на дев-стенде и на cloud.ru, но закрыта паролем и запретом индексации по решению владельца. Продуктовой работы по ней не было с 12 августа: с тех пор только блог и инфраструктура. До прототипа состав не доведён, тестов нет.
| Функция | Состояние | Доказательство | Что осталось | Оценка |
|---|---|---|---|---|
| Лента с фильтрами, календарём, районами, подборками и сторис | есть, серверный рендер | app/pages/index.vue, данные из публичных ручек событий, каталога, сторис | По прототипу нет 7 из 13 блоков ленты (акции, «похожие люди», повестка, календарь сеткой); половина требует бэкенда | 3–5 фронт + 5–8 с бэком |
| Популярное, каталог, подборки, поиск | есть | Страницы в main с 11–12.08 | «Сохранить подборку» без ручки; контент подборок и сторис никто не производит | 1–2 + контент |
| Карта Leaflet с кластерами | есть | pages/map.vue, клиентский рендер | Нет | 0 |
| Карточка события | есть | Страница и модалка, публичная ручка | Нет canonical, OG и разметки Event; событий нет в карте сайта | 2–3 чд |
| Посадочная «город + тема» | есть | pages/t/[city]/[topic].vue | Только заголовок и описание; редакторских блоков нет (нет модели на бэке); нет в карте сайта | 2–3 + бэк 3–4 |
| Организатор, жалоба, отзыв | есть | Коммиты 72d39ca3, e534d5b2, dfbf3567 | Нет | 0 |
| Личный слой: вход, «мои события», мастер создания, кабинет организатора | есть, только на клиенте | Токен в localStorage, гарда «личная ручка на сервере бросает ошибку» | Сегменты «мои события», правка события, рассылка и явка у организатора, онбординг; чаты события и уведомления вне объёма | 4–6 чд |
| Блог | есть | См. раздел 10 | Нет | 0 |
| robots, карта сайта, индексация | частично | robots закрыт без флага; карта сайта содержит только блог; файл ключа IndexNow витрина не отдаёт | Карта сайта событий, посадочных и подборок; политика для прошедших событий; ключ IndexNow | 1,5–2,5 чд |
| Тесты и CI | нет | CI только собирает образ | Смоук Playwright страниц и мета, шаг в CI | 2–3 чд |
| Выкат на своём домене | ждёт домена | Инструкция в migration/cloud-ru/WEB-EVENTS.md: пересборка с корневым путём, ingress и TLS, снять пароль, включить индексацию последней | Выполнить после покупки домена | 1–2 чд |
Свёрстаны 36 экранов по нодам Figma, но в само приложение подключены пять экранов регистрации. Вкладки, лента, чаты, профиль и оплата работают в старом виде без макета. В TestFlight лежит внутренняя сборка от 22.09. Вечером 24.09 владелец взял iOS на себя; путь (дожать SwiftUI или собрать из кода Android) не выбран.
Весь iOS-код по макету есть только на GitHub (23 коммита Вадима 18–22.09), тогда как вся Android-работа после 14.09 есть только на этом сервере: два потока разъехались по разным хранилищам.
| Область | Состояние | Доказательство | Что осталось | Оценка |
|---|---|---|---|---|
| Регистрация и онбординг | начато | Телефон, код, имя, дата рождения, пол и рост по нодам; дальше четыре старых шага | Подключить 11 экранов из галереи (заставка, приветствие, гео, город, анкета, интересы, флаги, открывашки, медиа, видео), логику анкеты | 8–10 чд |
| Анкета и правка | начато | Старая правка (фото, о себе, работа); экраны по нодам в галерее | Переходники, порядок фото, открывашки, флаги | 4–5 чд |
| Лента и колода | начато | Старая лента работает (свайп, события, мэтч); карточка по нодам с 124 кадрами написана без единого снимка | Сверка 124 кадров, переходник, обучение свайпу, экран мэтча | 8–10 чд |
| Фильтры, симпатии, записки | начато | Старые экраны работают; экраны по нодам «код без сборки» от 18.09 | Сверка и переходники, превью карточки | 6–8 чд |
| Чаты и переписка | начато | Старые экраны работают лучше Android (курсор, повтор отправки); по нодам 56 кадров в галерее | Переходники; те же серверные хвосты, что на Android | 5–6 чд |
| Видео-кружок, голос, камера | не начато | В коде нет ни записи, ни проигрывания видео; селфи для верификации берётся из галереи | Запись кружка, плеер, живая камера для селфи (обход верификации через галерею) | 6–8 чд |
| Профиль и настройки | начато | Старые экраны работают; по нодам в галерее | Переходники, шторки, FAQ и правила | 4–5 чд |
| Подписка и оплата | начато, несовместимо с App Store | Покупка через веб-эквайринг в браузере внутри приложения; StoreKit нет | StoreKit 2, продукты в App Store Connect, настройки сервера; иначе отказ по правилу 3.1.1 | 6–8 чд + ASC |
| Системные экраны, версия приложения | не начато | Нет кодов 101 и 121, нет заголовка версии, нет опроса техработ | Три экрана, заголовок, опрос | 2–3 чд |
| Пуши | не начато | Сервис пустой; entitlements нет; сервер принимает только токены Firebase | Firebase iOS SDK, ключ APNs, entitlement, фоновые режимы | 2–3 чд + доступ |
| Сборка, подпись, магазин | начато | Конвейер TestFlight на макмини есть; профиль подписи действует до марта 2027; privacy-манифеста нет | Запись в App Store под своим пакетом или перенос записи Flutter; манифест приватности, скриншоты, внешнее тестирование, ревью | 2–3 чд + внешнее |
Остаток до «готово к магазину»: SwiftUI-путь 55–70 чел-дней, 11–14 недель одного разработчика с макмини. Подключение 31 экрана и сверка кадров 25–30 дней, функциональные доборы 15–18, покупки, пуши, приватность и листинг 10–12, регресс и ревью 5. Путь через Compose Multiplatform: после пилота «По душе» перенос слоя интерфейса 6–9 недель плюс те же внешние блокеры; выигрыш в общем коде с Android и уже сведённых 470 кадрах.
Функционально полный клиент под демо и тест: по макету собрано почти всё, три круга правок владельца сделаны. До магазина не доведён: нет пушей, системных экранов блокировки и обновления, прогона оплаты, релизной подписи и версии.
| Область | Состояние | Доказательство | Что осталось | Оценка |
|---|---|---|---|---|
| Регистрация и онбординг (S01–S26) | работает | Форма закрыта по реестру; блокер тупика после анкеты и 8 находок починены; адаптивные отступы под телефон | Приёмка LYUBVI-25, 26, 28…33, 40, 47…50; шаг видео при регистрации не прожат вживую; системный крупный шрифт зажат | 2–3 чд |
| Анкета и её правка | начато, не доделано | Правка анкеты и вопросы по нодам подключены (16 из 19 кадров) | Флаги и открывашки идут через старые экраны; старые файлы не удалены | 2–3 чд |
| Лента и колода анкет | работает | Колода, карточка, профиль и оверлей мэтча по нодам, расхождение кадров до 0,26 % | LYUBVI-42: при анкете ниже 54 % лента пуста без подсказки; мэтч на стенде не прожат | 1–2 чд |
| Фильтры | работает | Экран по нодам, 6 кадров сходятся | Входа в пейволл из фильтров нет | 0,5–1 чд |
| Симпатии и мэтч | работает | Вкладка по нодам; пейволл открывается из симпатий | Скелет, ошибка и таймер закрытых симпатий; кадры вариантов V3/V4 | 1–2 чд |
| Чаты и переписка | работает, требует доработок | Список и тред по нодам, WebSocket | Список берёт только 10 переписок (сервер отдаёт по курсору, клиент курсор не шлёт); правка и удаление сообщений и «печатает» сервер умеет, клиент нет; меню сообщения только в кадрах | 4–6 чд |
| Видео-кружок и голос | работает | Проигрывание Media3 (LYUBVI-35), запись CameraX 10 с (LYUBVI-51); голос спрятан флагом (LYUBVI-21), на сервере заглушка | Запись при регистрации не прожата; размытие фона на весь экран; голос ждёт LLM | 1 чд |
| Профиль и настройки | работает | Профиль, настройки, FAQ и правила по нодам, проверены | Карточка подписки в профиле не подключена, хотя сервер уже отдаёт дату и сумму списания | 1–2 чд |
| Подписка, пейволл, оплата | начато, не прогнано | Пейволл по нодам; покупка через Play Billing или веб-эквайринг в Custom Tabs; экран «Оплата прошла» не вызывается | Ни разу не прогнано на терминале (LYUBVI-17 в беклоге, ключи у владельца); у сервера нет проверки покупок Play: ветку Play держать выключенной | 2–3 чд + сервер |
| Сообщества и реферальная программа | не начато функционально | Маршруты объявлены, но не назначаются; экраны без вызовов; ручек ленты и начислений нет | Решение владельца: делать ли | 0 или 8–12 чд |
| Системные экраны: блокировка, жёсткое обновление, техработы | не начато | Три экрана написаны, вызовов нет; заголовок версии приложения не шлётся; коды 101 и 121 клиент не понимает | Заголовок версии, обработка кодов, опрос ручки техработ, показ экранов. Без этого старые версии после релиза не выгнать | 2–3 чд |
| Пуши | не работает | Сервис пустой без файла Firebase; доступа к проекту Firebase нет; на стенде пуши уходят в мёртвую очередь | Доступ к Firebase, конфиг для пакета, сквозная проверка | 1–2 чд после доступа |
| Верификация селфи | работает | Экраны S22–S24 по нодам, съёмка через камеру | Через камеру руками не прожато (тестовый аккаунт уже подтверждён) | 0,5 чд |
| Журнал ошибок и аналитика | начато | Очередь продуктовых событий уходит на сервер; Sentry встроен, адрес приёмника пуст | Адрес приёмника от DevOps, загрузка mapping | 0,5 чд + DevOps |
| Нагрев телефона | сделано, не влито | LYUBVI-52: пауза видео-кружков, кэш 200 МБ, спящие вкладки, пауза сокета; трафик 1,7 МБ за 30 с → 1 КБ | Общая сборка по решению владельца; проверка на настоящем телефоне | 1 чд |
| Сборка, подпись, магазины | не начато | Код версии 1 против 128 у Flutter в магазине; ключ отладочный; Play Console и Firebase недоступны | Релизный ключ или Play App Signing, код версии больше 128, листинги Play и RuStore, пины сертификатов, вкус prod после переезда бэкенда | 2–3 чд + доступы |
Остаток до «готово к магазинам»: 20–28 чел-дней, 4–6 недель одного разработчика. Допущения: доступы к Play, Firebase и ключи выдаются в первую неделю, DEMO-терминал прогнан, приёмка владельца укладывается в 3–5 дней, общая сборка с правкой нагрева влита. Сообщества и рефералка с серверной частью и проверка покупок Play добавляют 10–15 дней.
В Google Play, RuStore и App Store живёт Flutter-приложение от Surf версии 1.4.2 (128). Оно шлёт версию приложения серверу, продаёт подписку через покупки Apple, пуши идут через Firebase. Его подписной ключ Android и запись в Apple под чужим идентификатором пакета не в наших руках. Тег «0.0.71-prod» относится к образу бэкенда Surf, а не к приложению. Заменить Flutter нативными сборками мешают: ключ и консоль Play, код версии, пуши без Firebase, покупки на iOS и переезд бэкенда на cloud.ru, который ещё впереди.
React-клиент повторяет Android один в один по экранам, живёт на дев-стенде по адресу /app/ и не менялся с 11 августа (по сути с 13 июля). В роадмапе его нет, на cloud.ru он не развёрнут и не запланирован, карточек в трекере нет. Главный вопрос к владельцу: нужен ли он вообще.
| Функция | Состояние | Доказательство | Что осталось | Оценка |
|---|---|---|---|---|
| Вход, онбординг, гейты | есть | Машина состояний в src/App.tsx | Тестовый код входа зашит во все env-файлы, включая production (DUSHA-7); экранов блокировки и обновления нет | 1–2 чд |
| Лента, свайпы, симпатии, чаты, профиль, события, пересечения, скоринг, голос, верификация, рефералка, подписка | есть по матрице паритета | docs/WEB_PARITY.md: всё отмечено сделанным, кроме платформенного | Совместимость с текущим бэкендом никто не проверял: с 11.08 менялись профиль, тарифы, платежи, лимиты | регресс 3–5 чд |
| Оплата | через ссылку эквайринга | Play Billing не применим | Прогон против песочницы Т-Банка в вебе не делался | 2–3 чд |
| Пуши в браузере | нет | Web push не реализован | Решить, нужны ли | 3–4 чд при «да» |
| Деплой и CI | скрипты PowerShell с Windows | docs/DEPLOY_DUSHA.md | Чарт и ingress для cloud.ru или отказ от веба; смоук | 4–6 чд |
| Лендинг (web-landing) | статичный прототип, не выкачен | Не трогался с импорта 04.08, смотрит на домен подрядчика | Удалить или переделать под новый домен | 0 или 2–3 чд |
При решении «нужен»: 12–18 чел-дней до публичного запуска (регресс и починка, оплата с вебхуками, прод-конфиг и чарт cloud.ru, экраны блокировки и юридические страницы, смоук и CI). Пуши и лендинг сверху. Допущение: бэкенд знакомств уже в состоянии релиза. Домен знакомств не выбран (вопрос O-2 спецификации SEO), он нужен и вебу, и блогу знакомств.
Единая консоль оператора на два продукта функционально полная для внутреннего стейджа: 41 раздел в четырёх пространствах, замечания владельца от 14.09 закрыты. Не готова к проду: общий токен в браузере, переопределение ролей включено на стендах, удаление данных «по возможности», аудит без неизменяемости. Три версии консоли на трёх стендах не совпадают ни с одной веткой.
| Раздел | Состояние | Доказательство | Дефекты и что осталось | Оценка |
|---|---|---|---|---|
| Обзоры платформы и продуктов, аналитика | готово | Ручки здоровья и инсайтов с кэшем, 17 тестов | DUSHA-16, 17 (тексты и имена вместо идентификаторов) сделаны, ждут выката | выкат |
| Пользователи, верификация, модерация фото и видео, жалобы, чаты | готово | LYUBVI-4…9 закрыты 14.09; пагинация, поиск, закрытие лишних попыток | Нет мастера стирания и сессий устройств (P1); 73 битых фото на прод-копии это данные | 0 (P1: 3–5) |
| Тикеты, обращения, переписка поддержки | работает | DUSHA-79: ответы в чат приложения из консоли, 10 тестов; только в ветке | Выкат с миграцией; SLA и шаблоны ответов (P1) | 0,5 чд |
| Финансы, тарифы, подарки, рефералка, сообщества | готово | LYUBVI-6, 7 закрыты: поиск, платформы, валидация, заявки | Возвратов и сверки нет (P1) | 0 (P1: 5–8) |
| Антифрод, DSR, аудит и согласования | работает, не прод-уровень | Агрегаты и заявки есть; стирание «по возможности» с оговоркой в коде; журнал аудита обычной таблицей | Политика удаления из чатов, медиа и бэкапов; четыре глаза на удаление; неизменяемость и ретеншн журнала; актор у общего токена | 5–8 чд |
| Настройки, флаги, FAQ, обновления, города, мат-слова, районы | готово | DUSHA-19 сделана; районы как справочник | На cloud районов нет (DUSHA-55, данные) | DevOps 0,5 |
| Система и роли, виджет «Доступные разделы» | работает | Матрица ролей, копия диплинка | LYUBVI-44: назначение виджета непонятно, решения нет | 0,5 чд |
| Каталог событий, дубли, реакции, подборки, темы, бот анонсов | готово | 115 тестов по фильтрам, переопределениям и импорту; состояние карточки выводится, замки от перезаписи | Серверные правки DUSHA-57, 58, 60 в ветках ждут выката | выкат |
| Сборщики: источники, прогоны, автосбор, политики, Telegram-каналы, самопоиск | работает | Модули на 2 080 строк, 14 ручек в ветке; консоль сервиса сборщиков наружу не выставлена, всё через проброс | Пропущенные посты, кнопка «алгоритм ошибся», пакетные действия, вкладка тревог; выкат самопоиска на прод | 3–5 чд |
| SEO-редакция | готово | 9 модулей, 30+ ручек, 655 тестов | Остаток внешний: домен, кабинеты; предпросмотр черновика | 0 (см. раздел 10) |
| Ошибки приложений | начато | Раздел и клиент GlitchTip есть, 13 тестов; приёмника нет нигде, раздел отвечает «не настроено» | GlitchTip на cloud.ru у DevOps, адреса в сборки, проверка стеков | 1–2 + DevOps 1–2 |
| Справки НПД (самозанятость) | ручки есть, экрана нет | 26 тестов на сервере; в консоли только плитка | Экран очереди и решения | 2–3 чд |
DUSHA-8 (разделить фронт и бэк: по факту консоль уже отдельный образ и volume), DUSHA-9 (дубли методов в обновлениях, не консоль), DUSHA-10 (зачистить legacy: три пустых пакета и Flutter), DUSHA-42 и 44 (магические числа и абсолютные размеры относятся к Android, а 44 противоречит уже принятому правилу «ширина без координат»), DUSHA-5 и 6 без критерия, DUSHA-15 (адрес /ops без слеша ломает вход на cloud.ru: редирект в ingress, четверть дня). Комментариев и решений нет ни по одной.
Сервис сборщиков работает автономно: волна каждые 12 часов, 28 источников, 125 тысяч событий в каталоге дев-стенда. Как прод-сервис не готов: ротируемые ключи VK и Добро мертвы с 14 сентября и каждые 8 минут зовут человека, тревоги считаются и никуда не уходят, две площадки закрыли доступ по адресу стенда, на cloud.ru крон выключен и стоит версия 14 сентября, перенос на стенд то гасит, то оживляет тысячи карточек крупных источников.
| Источник | Транспорт и ключ | Состояние | Факт 24.09 | Что осталось |
|---|---|---|---|---|
| kudago | REST, без ключа, 13 городов | работает | 1 728 живых, обложки 100 %, автопубликация | Нет |
| leader_id (с Точками кипения) | REST, 90 городов | работает | 2 506 живых, автопубликация | Номера Тулы и Ярославля не сверены; 7 красных тестов по датам |
| dobro | API, JWT только для картинок | с оговорками | 1 470 живых, обложек 36 %: ключ мёртв с 14.09 | Ручной вход человека; без обложек карточки не годны в ленту |
| timepad | Разбор афиши браузером, 8 городов (токен отозван) | работает | 2 465 живых, 21 минута | Пропуск неизменившихся деталей не заведён |
| data_mos | Дампы, демо-режим | справочник площадок | 10 291 площадка; в ленту не идёт | Нет |
| opendata_mkrf | Бесплатный ключ, Москва и Петербург | работает | 317 живых | Расширить города (волна 8) |
| vk | Сервисный и пользовательский токены, 69 городов | деградация | 69 ошибок «неверный токен» за волну, 1 запись; 1 373 живых, 0 опубликовано | Токен мёртв с 14.09, путь VK ID ни разу не сработал; ручной вход |
| qtickets | HTML, 3 города | работает | 181 живых, автопубликация | Нет |
| kassir | API и HTML, 5 городов | работает | 16 259 живых, автопубликация | Нет |
| ticketland | HTML и API, Москва и Петербург | с оговорками | 11 864 живых; раздел Петербурга отвечает 404 | Снять умерший раздел |
| afisha | Лестница httpx → curl → браузер, 5 городов | с оговорками | 13 580 живых; 198 площадок-«пустышек» | Выкатить DUSHA-60 (только в релизной ветке) |
| yandex_afisha | Внутренний GraphQL | с оговорками | 1 305 живых; прогрев отвечает 404 | Разобрать прогрев |
| nethouse | JSON и JSON-LD, 6 городов | работает | 2 191 из 9 182 сырых; 83 минуты, самый долгий; без автопубликации | Детали без сеансов; решение о публикации |
| radario, intickets | JSON и API | работают | 546 и 172 живых; без автопубликации | Решение о публикации |
| gorodzovet | Календарь по дням, 6 городов | работает | 30 140 живых, крупнейший; 0 опубликовано из-за риска дублей | Активность на стенде флапает (см. ниже); решение о публикации |
| mtslive | API и гостевой cookie | работает | 14 338 живых; без автопубликации | Решение о публикации |
| mosafisha (bilet.mos.ru) | Лента новостей API | закрыт по адресу | 403 в 7 из 14 прогонов, последний успех 22.09; 4 892 живых | Выяснить блок адреса; парковать, а не красить волну |
| bileter | HTML и гео здания | работает | 3 113 живых | Нет |
| russpass | API | закрыт по адресу | 403 в 14 из 14 прогонов, последний успех 16.09; 7 043 живых стареют | Другой адрес или прокси; карточка |
| all_events | Bitrix, 19 городов | с оговорками | 609 живых; обложки на 70 % битые (DUSHA-57) | Выкатить проверку медиа (только в релизной ветке) |
| habr_events, hse, ithrhub, venue_cals | API и SSR | работают | 17, 137, 5 и 47 живых | «Технопарк» не выбран |
| moibiz | 3 адаптера и 57 региональных порталов, 60 городов | с оговорками | 2 895 живых; 19 ошибок региональных порталов; автопубликация | Реестр состояния порталов |
| bizassoc (Опора) | HTML | работает, пуст | 3 живых, самый бедный источник | ТПП и Деловая Россия позже |
| telegram | t.me/s/ через прокси | см. раздел 09 | 4 канала, 56 живых | Раздел 09 |
Беклог площадок: 29 карточек SRC-* в «Готово», 5 в «Заблокировано» (Ticketscloud за DDoS-Guard, Ponominalu это дубль МТС Live, 2do2go и Runet-ID мертвы, EdTech почти весь онлайн). Пять парков волны 6.1 у Егора (DUSHA-2 «В работе»: ВДНХ и парк Горького «готово», ещё три без статуса) в репозитории не видны ни в одной ветке; пятый сайт у него Эрмитаж-музей в Петербурге, а в спецификации имелся в виду сад «Эрмитаж» в Москве.
| Компонент | Состояние | Доказательство | Что осталось | Оценка |
|---|---|---|---|---|
| Оркестратор, параллельная волна, дедуп, уборка | работает | 28 прогонов за волну; за 7 дней 249 успешных, 100 частичных, 30 упавших | 403 у russpass и mosafisha поднимается как падение, а не парковка: волна красная каждый раз | 0,5 чд |
| Крон сбора | на стенде да, на cloud выключен | Чарт cloud.ru: сбор «off» на обоих контурах, ротатор ключей намеренно не переносился | Решение, кто собирает для прода; внешний сторож молчания | 1 чд |
| Ключи площадок и их продление | сломано с 14.09 | 607 записей «нужен человек» с 21.09; переменные VK ID есть в окружении, но в файл состояния не попали и в крон не пробрасываются | Разовый вход человека для VK и Добро, проброс VK ID в крон, решение об автовходе по логину и паролю | 1–1,5 чд + ручной вход |
| Тревоги | считаются, не отправляются | Адрес получателя пуст; ошибка подстановки в скрипте волны теряет поимённые коды источников, и тревога пишет «красных нет» при двух упавших | Задать вебхук (бот стенда есть), починить скрипт, внешний наблюдатель | 1,5–2 чд |
| Перенос каталога на стенд | работает, дефект уборки | Потолок 20 000 строк за проход с продолжением по курсору; резюмированный проход подметает всё, что синхронизировали предыдущие: 23.09 у gorodzovet просмотрено 2 418, погашено 30 190 | Защита «проход с курсора не убирает» или уборка по началу цикла; потолок по источнику | 1 чд |
| Геосправочник и координаты | частично | 128 798 адресов Москвы из OSM; 7 580 площадок без координат; догеокодирование в волну не вызывается | Backfill в волну, выгрузки для Петербурга, Екатеринбурга, Казани | 2–3 чд |
| Медиа, обложки, превью | только ссылки | 2 млн медиа без скачивания и проверок; превью (DUSHA-59) не начато | Выкат проверки обложек, сервис превью | 0,5 + 3–5 чд |
| Районы | стенд да, cloud нет | 144 района на стенде, 0 на cloud (DUSHA-55); команды импорта готовы | Запуск на cloud, выкат правки чужих районов | 0,5 чд |
| Качество данных | известные дыры | Организатор до стенда не доезжал (правка в релизе), 1 580 событий на площадке-«пустышке», 52 % каталога в премодерации, которую стенд не читает | Выкат релиза, политика массовых событий | в составе выката |
| Миграции каталога | две головы только в релизе | Стенд на ревизии самопоиска, cloud на ревизии до Telegram; склейка в релизной ветке | Влить релиз в кузню, поднять стенд и cloud до головы | 0,5 чд |
| Выкат на cloud.ru | пассивный сервис на stand-v1.9 | DUSHA-62 закрыта 18.09; отстаёт от релиза на 71 файл (DUSHA-57, 60, 63); состояние на emptyDir | Топология: кто собирает, постоянный том, секреты, исходящий адрес для площадок с блокировкой | 3–5 DevOps |
| Тесты и документация | зелёные, кроме 7 | 81 файл, 907 тестов; внутренние доки описывают 27 коллекторов | Сдвиг дат в фикстурах, догнать доки | 1–2 чд |
| Волна | Состав | Оценка |
|---|---|---|
| 6 «Лектории, парки, ДК Москвы» | Парки (9 сайтов, у Егора 2 из 5 вне репозитория), Мосспорт, библиотеки, лектории-2 (7 сайтов), дома культуры (7), МГУ и РАНХиГС | 35–50 чд |
| 7 «Клубные форматы» | Квизы, настолки, прогулки, бег, Чистые игры, общинные календари, книжные, гастро, маркеты, быстрые свидания | 25–35 чд |
| 8 «Регионы» | Расширение городов у 8 источников, Geometria, Выбирай, городские медиа, 2ГИС | 12–18 чд |
| 9 «Соцсети» | VK whitelist, TenChat (Telegram сделан правилами, раздел 09) | 4–6 чд |
| Итого новые площадки | 75–110 чд |
Остаток до стабильного прод-сервиса без новых площадок: 18–28 чел-дней разработки и 4–7 дней DevOps, плюс регулярный ручной вход в VK и Добро, пока путь VK ID не заработает. Ключи 1–1,5, тревоги 1,5–2, парковка блокировок 1–2, выкат релиза 1–2 DevOps и 1 проверка, уборка переноса 1, гео 2–3, качество данных 3–5, превью 3–5, топология cloud 3–5 DevOps, тесты и документация 1–2. Новые площадки волн 6–9 отдельно: 75–110 чел-дней.
Сборщик каналов и самопоиск каналов крутятся в штатном кроне дев-стенда с 17 и 21 сентября. Дальше стенда код не ушёл: на GitHub его нет, на cloud.ru не выкатывался, очередь оператора никто не разбирает.
| Функция | Состояние | Доказательство | Что осталось | Оценка |
|---|---|---|---|---|
| Чтение канала через веб-версию t.me/s/ (без аккаунта) | готово | ingestion/collectors/telegram/http_client.py, parse.py; 22 успешных прогона с 21.09 | Тревога на поломку разметки t.me (smoke есть, оповещения нет) | 0,5 чд |
| Разбор поста в карточку: правила без модели (даты, адрес, цена, отмена, перенос) | работает, требует доработок | rules.py v3, normalize.py; замер на незнакомых каналах: вид поста 81 %, «есть событие» точность 70 % при полноте 100 %, площадка пуста у половины | Время с точкой в конце не ловится, подборка ложится одной карточкой, площадку вписывает оператор; перепрогон набора Т-35 после правок | 2–3 чд |
| Перехостинг обложек (telesco.pe закрыт в РФ) | готово | /api/export/media, events/catalog_import.py; на стенде 26 из 55 карточек с перехощенной обложкой, у 29 фото в веб-версии нет | Миниатюры видеопостов; повтор неудачной загрузки | 0,5 чд |
| Реестр каналов, статусы чтения, кнопка «Прочитать», страница канала в консоли | готово (v1) | Таблица telegram_channels, ручки /api/export/telegram/*, Django-проброс с RBAC, модули консоли ingest.js и ingest-telegram.js | Пробелы П-1…П-3 из docs/38: пропущенные посты не хранятся, нет кнопки «алгоритм ошибся» и пакетных действий | 2–3 чд |
| Глубина 45/90 дней, повторные чтения, снятие удалённых и отменённых с ленты | готово | collector.py, lifecycle.py, ежедневная перепроверка 20:23; выгрузка не отдаёт событие без живой ссылки | Приёмка «удалил пост, карточка снята» не зафиксирована в DUSHA-63 | 0,5 чд |
| Самопоиск каналов: каталоги, снежный ком, автопроверка, оператор принимает | работает, DUSHA-63 на проверке | Пакет discovery/, таблицы кандидатов и проходов, крон по понедельникам, консоль ingest-candidates.js; 6 проходов 21.09, с тех пор ни одного | Лимит 60 проверок на город в неделю при 744 непроверенных даёт очередь на месяцы; 43 предложенных ждут решения | 1 чд + оператор |
| Проверка оператором и публикация | начато, не налажено как процесс | Публикация только руками (auto_publish=False по ADR); 0 из 55 карточек опубликовано | Назначить оператора, дать пакетные действия | 1 чд + часы оператора |
| Прокси в Telegram: tinyproxy на salam0nn и ssh-туннель на дев-стенд | работает, единая точка отказа | Прокси активен с 17.09, туннель рвался 23.09 и поднялся сам; при недоступности источник паркуется на 20 часов и молча выключается (так потеряны 18–21.09) | Для прода нужен зарубежный путь не через личный сервер: реле Cloudflare Worker (код есть) или VPS; проверка здоровья прокси | 1–2 чд + DevOps |
| Тревоги о парковке источника и падении прокси | начато, не доделано | Общие тревоги волны есть (ingestion/alerts.py), парковка волну не красит | Тревога на парковку и недоступность прокси; доставка тревог с VDS в Telegram не проверена | 0,5–1 чд |
| Извлечение моделью (LLM) | не начато по решению | ADR-0003: только алгоритм и оператор; замер Opus 5 сохранён в docs/37 на случай гибрида | Ничего | 0 |
| Чаты и группы Telegram (не каналы) | не начато, вне MVP | Читаются только через аккаунт (Telethon), отвергнуто условиями API; группы распознаются и отклоняются | Отдельное решение про аккаунт и юридическую сторону | 5+ чд |
| Бот анонсов «По душе» (отдельный продукт, не парсер) | готово, на стенде деградирует | Влит в main с 12.08; на стенде опрос Telegram идёт через туннель, в журнале таймауты и 504 (последний 24.09) | Посмотреть туннель на стенде | 0,5 чд |
Остаток до прод-готовности: 7–10 чел-дней разработки, 2–3 дня DevOps и часы оператора. Вернуть код на GitHub и провести ревью (1–2 дня), зарубежный путь и выкат на cloud.ru (1,5 дня плюс DevOps), тревоги (1 день), правила (1–2 дня), удобства оператора и лимит самопоиска (2–3 дня). Допущения: чаты и модель не делаются, дизайн консоли не меняется.
Редактор статей с ИИ-помощником, блог на витрине, счётчик чтения и аналитика сделаны целиком и приняты на стенде 30–31 августа. Код заморожен с 31.08 и целиком лежит на GitHub. До публичного запуска остаётся только внешнее: домен, кабинеты Яндекса и Google, открытие индексации. Этап 2 (позиции и показы из Вебмастера и Search Console) не начат и по плану стартует через 2–4 недели после индексации.
| Задача плана | Состояние | Доказательство | Что осталось |
|---|---|---|---|
| Модели, автосохранение, замок редактирования, воркер (B-1…B-3, I-1) | готово | seo/, ручки админ-API, воркер в demo-compose и в чарте cloud.ru | Замок не работает под общим токеном: нужны персональные входы (требование к развёртыванию) |
| Загрузка картинок и SEO-балл из 20 проверок (B-12, B-4) | готово | WebP и ресайзы, 20 файлов проверок | После выката один ручной запуск пересчёта вариантов картинок |
| Подбор запросов из Вордстата (B-5) | готово | Облачный API Яндекса, приёмка живым ключом 31.08, 51 тест | Ключ есть на стенде-ноутбуке; на dusha и cloud.ru не заведён; документ контракта пишет «ключа нет», устарел |
| Публикация: версии, расписание, откат, сброс кеша, IndexNow, публичное API блога (B-7, B-8) | готово | seo/publish.py, indexnow.py, public.py | Файл ключа IndexNow витрина не отдаёт; секрет сброса кеша на cloud.ru не задан |
| ИИ-помощник: статья целиком, чат, правка выделенного, скиллы (B-6, S-7, S-8) | готово | Апстрим Claude Opus 5 через панель на salam0nn, адрес зашит в код | Картинки выключены (решение владельца); на cloud.ru ключа нет, ручка ответит «ключ отсутствует» |
| Авторы, база знаний, каркас и экраны консоли (B-10, S-1…S-6, S-9, S-10) | готово | 7 документов базы знаний, экран «Как пользоваться» | Предпросмотра черновика нет; лента витринных анкет ждёт юридического решения O-7 |
| Витрина блога: страницы, мета, JSON-LD, лента, карта сайта, RSS (F-1…F-4) | готово | Страницы в web-events, серверные маршруты | Нет |
| Счётчик чтения, цели Метрики, CWV, мультидомен, права и аудит, вкладка «Аналитика» (B-9, F-5…F-7, B-11) | готово | Живая приёмка 30.08; ночные задачи свёртки и очистки | Метрика подключается только на боевом домене |
| Домен, кабинеты, го-лайв (I-4, I-5, I-6) | не начаты, ждут домена | Решение владельца 30.08: домен «в последний момент» | Купить домен, завести кабинеты, открыть индексацию последней |
| Этап 2: сбор позиций и показов, вкладка (A2-1…A2-5) | не начат | План 9,5 дней | Через 2–4 недели после индексации |
| Блог знакомств | код готов, домена нет | Один образ с переключателем продукта; статей 0 | Домен знакомств (O-2) и второй деплой витрины |
В списке из запроса пункт 11 пропущен. Сюда вынесено то, без чего не работает ничего из остального: общий Django-бэкенд с сервисом чатов и верификации, и путь кода от разработчика до прода. Бэкенд здоров: 1 596 тестов зелёные. Путь кода сломан: за десять дней накопилось 144 коммита и 9 миграций, которые есть только на этом сервере, а прод собирается из кузни, куда наши сессии не имеют ключа.
Пока владелец или Вадим не вольют релизную ветку в кузню (или не дадут ключ), ни одна серверная правка с 15.09 не доедет до cloud.ru: профиль и семейный статус, поиск, форма события с фото, поддержка, чат при записи, дайджест, регистронезависимый поиск, обложки all-events, площадки, самопоиск Telegram, раздел «Ошибки приложений» и пакет GlitchTip для DevOps. Расхождение растёт каждый день.
| Компонент | Состояние | Доказательство | Что осталось | Оценка |
|---|---|---|---|---|
| Django API обоих продуктов (24 приложения), консоль, каталог событий | работает | 1 596 тестов; проверки миграций и схемы; ветка release проверена на макмини 23.09 | Health-ручек без авторизации нет, проб в чартах нет, Sentry в бэкенде нет, логи текстом | 1–2 чд |
| Сервис чатов FastAPI с WebSocket и воркером | работает, пуши в мёртвую очередь | На дев-стенде один Redis на оба брокера и нет воркера чата: за сутки 27 сообщений «неизвестный актор», 139 в очереди мёртвых; сообщения не переносятся из Redis в Postgres | Воркер чата и разнос брокеров на стенде; регистрация акторов чатов событий есть только в интеграционной ветке 24.09 | 0,5 чд |
| Сервис верификации фото (NSFW и лицо) | работает | На cloud был мёртв 16–18.09, починен Вадимом | Образ при сборке качает модель из бакета Yandex: при отключении Yandex сборка сломается; проб нет | 0,5 чд |
| Воркеры Dramatiq (очереди, крон, подбор) | работают | На cloud включены 14.09 (LYUBVI-12) | Ресурсы и пробы не заданы | 0,5 чд |
| Миграции | работают при старте пода | Сухой прогон делался один раз 27.08; откат ни разу не пробовали | Сухой прогон 9 новых миграций, порядок наката, тайм-ауты блокировок | 1–2 чд |
| Тестовый режим входа | небезопасно | На прод-копии список тестовых номеров пуст, и общий код открывает любой из 36 тысяч аккаунтов; ограничитель по списку в коде есть (LYUBVI-15, DUSHA-56) | Правка Vault одним окном с удалением 13 тестовых аккаунтов; решение о настоящих SMS | 0,5 чд + решение |
| Платежи: Т-Банк (подпись вебхука, адрес уведомлений) и Apple (подпись JWS) | код готов, не прогнан | LYUBVI-13, 14, 16 «На проверке»; на cloud платёжные ключи выключены до переезда | DEMO-терминал (LYUBVI-17), идентификаторы пакетов iOS, боевые ключи | 1–2 чд + владелец |
| Пуши | не работают нигде | На стенде мёртвая очередь; на cloud воркер есть, но Firebase заглушка до переезда; APNs в коде нет | Ключ Firebase (старый засвечен), APNs, entitlements Flutter | 1–2 чд + доступы |
| Секреты в репозитории | утечка | На GitHub main лежит шаблон окружения с закрытым ключом сервисного аккаунта пушей и значениями, похожими на боевые (SMS, Apple, Django); env-файлы веб-клиента с тестовым кодом (DUSHA-7) | Ротация ключей, чистка истории, общий ssh-ключ и засвеченный ключ облака сменить | 1–2 чд |
| Нагрузка | не измерена | «Падает на 3 000 одновременных» из созвона 17.09; в репозитории только план и смоук k6, результатов прогонов нет; копия прода на 10 % vCPU, 1 реплика, без автомасштабирования | Прогон по плану (LYUBVI-19), поиск причины | 3–5 чд + 3–10 на причину |
| Журнал ошибок приложений (GlitchTip) | начато | Код и пакет для DevOps только в наших ветках; домена приёмника нет; адреса в сборках пусты | Доставить пакет в кузню, DevOps ставит, адреса в сборки | 1,5 чд + DevOps |
Остаток по бэкенду как платформе: 8–14 чел-дней (без нагрузки: до 3–10 дней на причину падения). Главное действие не инженерное: открыть путь в кузню и влить релизную ветку с дельтой 24.09.
Живой прод «По любви» по-прежнему у подрядчика Surf в Yandex, нашего кода там нет и не будет. Будущий прод и стейдж на cloud.ru собраны и выкатывались до 14 сентября, но на момент проверки 24.09 оба контура не отвечают ни из США, ни из России; причина снаружи не видна, алертов нет. Бэкапов базы на cloud.ru нет, нагрузка не прогонялась, окно переезда не подготовлено. Команда планирует переезд на другой сервер: переносимо почти всё, кроме привязок к облаку.
| Окружение | Назначение | Что там сейчас | Кто выкатывает | Живо 24.09 |
|---|---|---|---|---|
| Прод Yandex (Surf), production.plbvi.ru | Боевой трафик из магазинов, 36 тысяч пользователей | Вендорский образ 0.0.71-prod, наш форк не выкатывался никогда; сертификат до 30.11.2026 | Surf; у нас нет kubeconfig, доступ подрядчика отозван 18.08 | Да |
| Прод-копия cloud.ru, dushalove.uxbrain.ru | Будущий прод после переключения DNS | stand-v1.9 (14.09), сборщики v1.9 без крона, платежи и Firebase выключены до переезда, тестовый вход включён | Вадим с бастиона: тег → образы → стейдж → приёмка → prod-gate → ручной sync ArgoCD | Нет, порты закрыты |
| Стейдж cloud.ru, stage.uxbrain.ru | Приёмка релизов, синтетические данные, песочница платежей | stand-v1.9, автосинк ArgoCD | Автоматически по тегу | Нет |
| Дев-стенд заказчика, dusha.uxbrain.ru (VDS, Новосибирск) | Демо и разработка «По душе», единственный работающий контур сбора событий | Сервер: интеграция 22.09 плюс поддержка, поиск и чат события через docker cp; сборщики 21.09; образы от 01.09 с наложенными правками | Руками: rsync и docker cp, каталог не под git | Да, 19 дней аптайма |
| Стенд владельца (ноутбук через ssh-канал к salam0nn) | SEO и блог с 31.08 | Ветка SEO плюс незафиксированное | Владелец | Нет, канал выключен (принятое состояние) |
| Кузня Gitea git.uxbrain.ru (VM cloud.ru) | Источник правды, CI, зеркало на GitHub | Gitea 1.23, один раннер; бэкап tar на тот же диск; ssh открыт всему интернету | Владелец и Вадим | Да; наш ключ отвергнут |
| Макмини владельца | Сборки Android и iOS, тесты, рендеры | Загружен (load 25–30), 501 ГБ свободно | Сессии по ssh | Да |
| Приёмник ошибок GlitchTip, logs.uxbrain.ru | Журнал приложений | Домена нет, не развёрнут; тестовый экземпляр только на salam0nn | DevOps по нашему пакету | Нет |
| Этап | Состояние | Доказательство | Что осталось | Оценка |
|---|---|---|---|---|
| Код в кузню, зеркало на GitHub | для наших сессий закрыто | Ключ отвергнут; зеркало стирает чужие ветки и откатывает main | Ключ или токен в кузню, либо владелец вливает релизную ветку сам | 0,5 чд + решение |
| CI-проверки: бэкенд (1 497 тестов на main), сборщики, линт | работают | Gitea Actions на одном раннере | Сканеров безопасности по договору нет | 2–3 чд |
| Сборка образов по тегу stand-v*, реестр cloud.ru | работает | 5 образов плюс консоль; реестр отказывал 02–03.09 | Отдельный сервисный аккаунт на реестр неясен | 0,5 чд |
| Стейдж, приёмка (8 проверок), prod-gate | работают | Последняя приёмка v1.9 14.09; тестовый номер и код зашиты в workflow | Стейдж сейчас лежит | 0 |
| ArgoCD на прод-копию, ручной sync с бастиона | работает, требует доработок | Скрипт синка не включает сборщики; консоль вне ArgoCD; вся платформа (ingress, cert-manager, базы, Vault, мониторинг) ставится руками | Сборщики и консоль в ArgoCD, платформа как приложения | 2–3 чд |
| Секреты: Vault standalone | требует доработок | Ручное распечатывание тремя ключами после каждого перезапуска, корневой токен в файле на бастионе; общий ssh-ключ и засвеченные ключи не ротированы | Auto-unseal или алерт, ротация, чистка истории | 2–3 чд |
| Бэкапы | не начато | У кластера Postgres нет расписания (LYUBVI-18); ручной скрипт дампит одну базу из трёх; восстановление не проверялось; бэкап кузни на её же диске | Бакет, barman, расписание, WAL, тестовое восстановление; бэкап кузни наружу | 2–3 чд |
| Мониторинг и алерты | начато | Prometheus, Loki, Grafana с 27.08, лежат вместе с контуром; алертов нет, аварии 02, 03, 07 и 24.09 замечены случайно; проб и ресурсов у чартов нет | Алерты (Vault запечатан, доступность, мёртвая очередь), пробы, внешняя проверка не из того же облака | 2–3 чд |
| Логи приложений и тревоги сборщиков | начато | GlitchTip не развёрнут; вебхук тревог сборщиков пуст | Доставить пакет в кузню, поставить, задать вебхук | 2 чд |
| Подзадача | Состояние | Факт | Остаток |
|---|---|---|---|
| LYUBVI-12 воркеры Dramatiq на копии | готово 14.09 | Реплики и ресурсы заданы | 0 |
| LYUBVI-13, 14 подпись вебхука и адрес уведомлений Т-Банка | на проверке | Код в main; ждёт настоящего уведомления с DEMO-терминала | 1 чд |
| LYUBVI-15 тестовый вход по списку номеров | на проверке | Код есть; в Vault копии список пуст, код работает всем | 0,5 чд + решение |
| LYUBVI-16 подпись JWS Apple | на проверке | 13 тестов; ждёт идентификаторов пакетов iOS и песочницы | 0,5–1 чд + владелец |
| LYUBVI-17 DEMO-терминал на стейдже | не начато | Ключи из кабинета Т-Бизнеса у владельца | 1–2 чд + владелец |
| LYUBVI-18 бэкапы Postgres и проверка восстановления | не начато | Бакет создаёт владелец | 2–3 чд + владелец |
| LYUBVI-19 нагрузочный прогон | не начато | План 10.09, 7 решений владельца есть, прогонов нет | 3–5 чд + 3–10 на причину |
| LYUBVI-20 окно переключения | не начато | Нужны боевые ключи кассы, Apple, Firebase, APNs; доступ к DNS plbvi.ru (владелец зоны не установлен); баланс; согласование отклонения от договора | 2 чд + репетиция + владелец |
Даты считаны от 24 сентября при допущениях из разделов: команда в нынешнем составе, решения и доступы владелец даёт в течение недели, cloud.ru поднят. Реалистичная дата это середина диапазона оценки, оптимистичная нижняя граница при одновременном снятии всех блокеров.
| Направление | Что должно случиться сначала | Трудоёмкость | Оптимистично | Реалистично | Что не входит |
|---|---|---|---|---|---|
| Релизная ветка на cloud.ru | Ключ в кузню или слияние владельцем; контуры подняты | 1,5–2,5 чд DevOps | 1.10 | 8.10 | Дельта 24.09 сливается отдельно после показа iOS |
| «По душе» iOS: первая сборка в TestFlight | «Да» по Apple, карточка приложения, связка ключей до 5.10 | 75–150 ч | 6–8.10 | 9–15.10 | Пессимистично 20.10 при сдвигах текста после движка |
| «По душе» iOS: сборка, сверенная по 623 экранам | Первая сборка; макмини свободен под прогоны | 65–130 ч | 20.10 | 24–31.10 | App Store не раньше второй половины ноября: юрист, демо-номер, удаление аккаунта, иконка, ревью 1–2 недели |
| «По душе» Android: готово к магазинам | Доставка кода в кузню; приёмка 86 карточек владельцем | 35–50 чд | 22–29.10 | 5–12.11 | Оплата (+3–4 нед), связка со знакомствами (+2–3), личные чаты (+1,5–2), планшеты (+1) |
| «По любви» Android: готово к магазинам | Доступы Play, Firebase, ключи в первую неделю; DEMO-терминал | 20–28 чд | 22.10–5.11 | 29.10–12.11 | Сообщества и рефералка с проверкой покупок Play (+10–15 чд); замена Flutter в магазинах требует его ключа |
| «По любви» iOS: готово к магазину | Выбор пути и доступ к записи в App Store | 55–70 чд (SwiftUI) или 6–9 нед после пилота «По душе» (CMP) | 10.12 (SwiftUI) | конец декабря (SwiftUI); CMP: декабрь–январь | Покупки StoreKit, пуши, приватность входят; сообщества нет |
| «По душе» Web: публичный запуск | Домен куплен | 8–12 чд | +2 нед от домена | +3 нед от домена | До прототипа ещё 15–25 чд (3–5 нед) |
| «По любви» Web | Решение «нужен»; домен знакомств | 12–18 чд | +3 нед от решения | +4 нед от решения | Пуши в браузере, лендинг |
| Админ-панель: готова к проду | Доставка кода; персональные входы | 22–34 чд + 3–5 DevOps | 29.10 | 12.11 | Функции P1: возвраты, SLA модерации, антифрод-кейсы (+15–25 чд) |
| Сборщики: стабильный прод-сервис | Ручной вход VK и Добро; решение, кто собирает для прода | 18–28 чд + 4–7 DevOps | 22.10 | 5.11 | Новые площадки волн 6–9: 75–110 чд, то есть 4–6 месяцев одного инженера; волна 6 отдельно 7–10 недель |
| Парсеры Telegram: прод-готово | Зарубежный путь для прода; оператор очереди | 7–10 чд + 2–3 DevOps | 8.10 | 15.10 | Чаты и группы Telegram, извлечение моделью |
| SEO: го-лайв блога | Домен и кабинеты | 3–5 чд | +1 нед от домена | +1,5 нед от домена | Этап 2 (позиции, показы): 8–12 чд через 2–4 недели после индексации; наполнение блога редакцией |
| Прод cloud.ru готов принять трафик | Контуры подняты и разобрана причина; ключи, DNS, бакет от владельца | 18–32 чд | 22.10 | 12.11 | Причина падения под нагрузкой (+3–10 чд) неизвестна |
| Переезд на другой сервер выполнен | Готовый прод на cloud.ru; сервер и договор | 17–27 чд | 19.11 | 24.12 | Напрямую с Yandex, минуя cloud.ru: +2–3 чд |
Про дату 18 октября из роадмапа. К концу W16 реально иметь: релизную ветку на cloud.ru, обе Android-сборки в тестовой раздаче с принятыми карточками, первую сборку «По душе» в TestFlight, блог готовым к го-лайву при купленном домене. Недостижимы к этой дате: приложения в магазинах, iOS «По душе» сверенный, платные события (кода нет), связка «открыт для знакомств» (веха демо 04.10 без спецификации), переезд на другой сервер. Все даты выше сдвигаются день в день на каждый день, пока код не доезжает до кузни и cloud.ru лежит.
Срез сделан 24 сентября 2026 с 17:00 до 21:30 по Москве восемью параллельными разборами только чтением: git локально и на GitHub, код всех веток и рабочих деревьев, документы docs и docs/internal, kb, миграционные ранбуки, доски и карточки трекера DUSHA и LYUBVI, беклог площадок, заметки прошлых сессий, лёгкие запросы к стендам из США и из России, чтение дев-стенда и макмини по ssh без изменений. Ничего не менялось, не собиралось и не запускалось. Оценки в чел-днях даны исполнителями разборов при явных допущениях и не включают ожидание решений.
Николай: владелец, исполнитель большинства карточек. Вадим: DevOps cloud.ru с бастионом, до 24.09 вёл iOS «По любви». Нихромов М. С.: код-ревью и замечания по консоли. Егор: сборщики, волна парков. Тестировщик присылает круги через Telegram-бота. Разработка идёт в параллельных сессиях на этом сервере, сборки на макмини.