# WTG

Архивный кейс · VK parser и контентный pipeline

WTG — VK parser и контентный pipeline. Система собирает публикации и связанные материалы через VK API и Playwright, сохраняет raw evidence, ставит OCR и классификацию в очередь и выводит результат оператору для проверки, разметки и решения о публикации. Страница фиксирует интерфейс, архитектуру, code-map и измерения проекта.

Версия исходников: 21841487f52489d8bafaac379b9cc08199937661

Разработка и накопление материалов: июнь–июль 2026. Архивный кейс подготовлен 8 сентября 2026.

## Задача

Нужно было объединить сбор контента из VK, обработку изображений и текстов и операторскую проверку в одном наблюдаемом процессе. Каждая стадия должна оставлять проверяемый результат и поддерживать повтор без потери исходных данных.

Сбор и ручная проверка обработанных публикаций.

## Выполнено

- Сбор, очереди, обработка и экран проверки оператором.
- Админка, модели данных и code-map.

## Что отличает реализацию

Raw evidence хранится отдельно от производных данных. Очереди разделяют сбор, OCR, классификацию и редакционное решение; оператор видит источник и промежуточные результаты до публикации. Code-map связывает экран и API с модулем, таблицами и проверками, поэтому изменение можно проследить по всей цепочке.

## Состав прикладного кода

- Python content pipeline: 60.7%
- Python / VK / Playwright: 19.4%
- FastAPI / operator UI: 12.6%
- Alembic / PostgreSQL: 4.8%
- Python / OCR: 2.5%

Доли по размеру прикладных файлов Git в закреплённой версии. Каждый файл отнесён к одной подсистеме по правилам scripts/generate-stack-share.mjs; тесты, ассеты, зависимости и generated-файлы исключены. Округление — до 0,1%. Это состав кода, а не уровень владения технологиями.

## Стек

| Технология | Роль |
| --- | --- |
| Python / FastAPI / Jinja | Операционная админка, JSON API и orchestration. |
| PostgreSQL / SQLAlchemy / Alembic | Публикации, задания, версии решений, материалы и миграции. |
| PaddleOCR | Отдельный OCR sidecar и worker. |
| Docker / Nginx / systemd | Прежнее размещение семи служб и фоновые задания. |

## Архитектура

- Сбор и долгая обработка вынесены в задания с lease/heartbeat.
- OCR отделён от web и имеет самостоятельные очередь, статусы и попытки.
- Исходная публикация, промежуточные решения и итоговые материалы имеют разные роли.
- Публичный архив содержит обезличенные изображения, документацию и агрегированные измерения без пользовательских идентификаторов.

### Архитектура наблюдаемого контура WTG

![Архитектура наблюдаемого контура WTG](https://komaroff-dev.ru/evidence/wtg/diagrams/architecture.svg)

[Mermaid](https://komaroff-dev.ru/evidence/wtg/diagrams/architecture.mmd)

### Модель данных VK parser и pipeline

![Модель данных VK parser и pipeline](https://komaroff-dev.ru/evidence/wtg/diagrams/data-model.svg)

[Mermaid](https://komaroff-dev.ru/evidence/wtg/diagrams/data-model.mmd)

### Последовательность обработки публикации

![Последовательность обработки публикации](https://komaroff-dev.ru/evidence/wtg/diagrams/processing-sequence.svg)

[Mermaid](https://komaroff-dev.ru/evidence/wtg/diagrams/processing-sequence.mmd)

### Целевая схема разделения обработчиков из проектной документации

![Целевая схема разделения обработчиков из проектной документации](https://komaroff-dev.ru/evidence/wtg/diagrams/target-processing-layers.svg)

[Mermaid](https://komaroff-dev.ru/evidence/wtg/diagrams/target-processing-layers.mmd)

## Code-map

| Функция | Экран / API | Модуль | Данные / проверка |
| --- | --- | --- | --- |
| Авторизация | accounts | services/auth.py, vk_user_token.py | auth_accounts, account_communities; browser/API состояния рассматриваются раздельно |
| Создание и исполнение заданий | schedules, processing | services/admin_control.py, cli/admin_worker.py | admin_jobs, admin_job_step_logs; claim, heartbeat, retry, stale cleanup |
| Планирование API | schedules, group-pool | services/api_posts_schedule.py | api_schedule_steps, api_group_pool_items; поколение расписания, очередь, cooldown |
| Сбор | groups, posts | services/crawler.py, vk_parsers.py | communities, posts, post_media; источник, повторное чтение, нормализация |
| Профиль и маркет | groups tabs, market | community_profile.py, community_market.py, community_services.py | профиль, товары, услуги; фильтры и привязка к группе |
| Быстрый отбор | group-pool | fast_screen_pool.py, fast_wall_probe.py | fast_screen_pool_states, fast_screen_pool_checks; lease, due rows, retention |
| Pipeline | pipeline | services/content_pipeline.py | content_pipeline_runs/posts/items; этапы и сохранённые результаты |
| OCR | processing, post details | ocr.py, ocr_jobs.py, cli/ocr_worker.py, cli/ocr_sidecar.py | ocr_jobs, post_media; completed/failed, attempts, timeout |
| Канонические материалы | results | publication_materials.py, publication-intelligence | publication_decisions/materials/media; связь решения с исходником и версия |
| Разметка и teacher | labels, processing | publication_teacher.py | teacher runs/results/applications; разметка, расхождения, применение |
| Логи | logs, file-logs | web/app.py, helpers file logs | admin_job_logs, step logs, files; событийные и файловые следы |
| Выдача | Telegram / MAX | отдельные bot repositories | canonical output + bot tables; downstream использует подготовленные данные |

Перед изменением пройти связи экран → API → состояние → хранилище. Проверить входы, ошибки и повторные действия. Обновить карту и схемы вместе с кодом, выполнить связанные проверки и привязать материалы к версии.

## Сценарии

- Просмотрите обезличенные расписания, группы, pipeline и материалы.
- Сопоставьте экран со строкой code-map и схемой данных.
- Откройте агрегаты очередей и истории, прочитайте дату и ограничения замера.

## Проверки

- Обезличивание 30 снимков проверено по индексам материалов и полноразмерным изображениям.
- Code-map сопоставлен с экранными маршрутами, API, модулями, таблицами и проверками версии 2184148.
- Агрегаты очередей, OCR, публикационных материалов и размеров таблиц сохранены без пользовательских записей.

[prod-deploy](https://github.com/komaroffsergei/wtg-s/actions/runs/27615782756) — 61c78116acaeb954dce480ac591249e4f5e5bf3e, 2026-06-16T11:57:17Z; исторический запуск.

[prod-deploy](https://github.com/komaroffsergei/wtg-s/actions/runs/27615134214) — 1299a357d0f54961a196d2eaecb714a1d5319b60, 2026-06-16T11:45:01Z; исторический запуск.

## Результаты

- Сохранено 30 содержательных кадров фактического интерфейса.
- Дата, сценарий и версия указаны у каждого кадра.
- Зафиксировано 527 718 публикаций и 29 092 OCR-задания; это разные сущности и не показатели качества.

![collection history](https://komaroff-dev.ru/evidence/wtg/charts/collection-history.svg)

[Данные](https://komaroff-dev.ru/evidence/wtg/metrics/operational-snapshot.json)

![container logs](https://komaroff-dev.ru/evidence/wtg/charts/container-logs.svg)

[Данные](https://komaroff-dev.ru/evidence/wtg/metrics/operational-snapshot.json)

![cpu samples](https://komaroff-dev.ru/evidence/wtg/charts/cpu-samples.svg)

[Данные](https://komaroff-dev.ru/evidence/wtg/metrics/operational-snapshot.json)

![material types](https://komaroff-dev.ru/evidence/wtg/charts/material-types.svg)

[Данные](https://komaroff-dev.ru/evidence/wtg/metrics/operational-snapshot.json)

![ocr status](https://komaroff-dev.ru/evidence/wtg/charts/ocr-status.svg)

[Данные](https://komaroff-dev.ru/evidence/wtg/metrics/operational-snapshot.json)

![table storage](https://komaroff-dev.ru/evidence/wtg/charts/table-storage.svg)

[Данные](https://komaroff-dev.ru/evidence/wtg/metrics/operational-snapshot.json)

## Ограничения

- Архивный кейс не содержит работающей демо-ссылки; поведение фиксируют обезличенные экраны, схемы и агрегированные измерения.
- Статусы заданий и confidence не являются измерением точности OCR или моделей.
- Legacy noVNC и недоступные разделы не выдаются за работающие.
- Наблюдавшийся рост памяти web-процесса описан как факт замера; первопричина в коде не установлена.

## Запуск и эксплуатация

Checkout на сервере и опубликованный аудитированный репозиторий имеют разные SHA. Источник каждого вида evidence указан отдельно; соответствие старого image содержимому checkout не утверждается.

## Скриншоты

[Расписания сбора и обработки](https://komaroff-dev.ru/evidence/wtg/full/01-schedules.png) — 2026-09-06T21:16:48.230Z, 21841487f52489d8bafaac379b9cc08199937661.

[Состояния аккаунтов; профили и идентификаторы скрыты](https://komaroff-dev.ru/evidence/wtg/full/02-accounts.png) — 2026-09-06T21:37:46.883Z, 21841487f52489d8bafaac379b9cc08199937661.

[Глобальный пул групп; экран фиксирует данные стадии, доступные оператору действия и результат обработки.](https://komaroff-dev.ru/evidence/wtg/full/03-group-pool.png) — 2026-09-06T21:16:57.865Z, 21841487f52489d8bafaac379b9cc08199937661.

[Обработка, очередь OCR и сохранённый запуск teacher](https://komaroff-dev.ru/evidence/wtg/full/04-processing.png) — 2026-09-06T21:22:48.059Z, 21841487f52489d8bafaac379b9cc08199937661.

[Канонические публикационные материалы](https://komaroff-dev.ru/evidence/wtg/full/05-results.png) — 2026-09-06T21:37:50.167Z, 21841487f52489d8bafaac379b9cc08199937661.

[Список сообществ; экран фиксирует данные стадии, доступные оператору действия и результат обработки.](https://komaroff-dev.ru/evidence/wtg/full/06-groups.png) — 2026-09-06T21:22:52.400Z, 21841487f52489d8bafaac379b9cc08199937661.

[Каталог товаров; экран фиксирует данные стадии, доступные оператору действия и результат обработки.](https://komaroff-dev.ru/evidence/wtg/full/07-market.png) — 2026-09-06T21:22:55.701Z, 21841487f52489d8bafaac379b9cc08199937661.

[Pipeline: операторский обзор](https://komaroff-dev.ru/evidence/wtg/full/08-pipeline.png) — 2026-09-06T21:52:00.656620+00:00, 21841487f52489d8bafaac379b9cc08199937661.

[Разметка и метки; экран фиксирует данные стадии, доступные оператору действия и результат обработки.](https://komaroff-dev.ru/evidence/wtg/full/09-labels.png) — 2026-09-06T21:52:00.656620+00:00, 21841487f52489d8bafaac379b9cc08199937661.

[Журнал заданий; экран фиксирует данные стадии, доступные оператору действия и результат обработки.](https://komaroff-dev.ru/evidence/wtg/full/10-logs.png) — 2026-09-06T21:22:57.278Z, 21841487f52489d8bafaac379b9cc08199937661.

[Файловые журналы с редактированием чувствительных блоков](https://komaroff-dev.ru/evidence/wtg/full/11-file-logs.png) — 2026-09-06T21:23:03.321Z, 21841487f52489d8bafaac379b9cc08199937661.

[Карточка сообщества: обзор; экран фиксирует данные стадии, доступные оператору действия и результат обработки.](https://komaroff-dev.ru/evidence/wtg/full/12-group-overview.png) — 2026-09-06T21:23:06.094Z, 21841487f52489d8bafaac379b9cc08199937661.

[Карточка сообщества: исходные публикации](https://komaroff-dev.ru/evidence/wtg/full/13-group-posts.png) — 2026-09-06T21:23:08.507Z, 21841487f52489d8bafaac379b9cc08199937661.

[Карточка сообщества: товары; экран фиксирует данные стадии, доступные оператору действия и результат обработки.](https://komaroff-dev.ru/evidence/wtg/full/14-group-market.png) — 2026-09-06T21:23:10.026Z, 21841487f52489d8bafaac379b9cc08199937661.

[Карточка сообщества: профиль](https://komaroff-dev.ru/evidence/wtg/full/15-group-profile.png) — 2026-09-06T21:23:11.568Z, 21841487f52489d8bafaac379b9cc08199937661.

[Исходная публикация и результаты обработки](https://komaroff-dev.ru/evidence/wtg/full/16-source-post.png) — 2026-09-06T21:23:13.647Z, 21841487f52489d8bafaac379b9cc08199937661.

[Карточка элемента pipeline; экран фиксирует данные стадии, доступные оператору действия и результат обработки.](https://komaroff-dev.ru/evidence/wtg/full/17-pipeline-item.png) — 2026-09-06T21:23:15.568Z, 21841487f52489d8bafaac379b9cc08199937661.

[История и статистика сбора; экран фиксирует данные стадии, доступные оператору действия и результат обработки.](https://komaroff-dev.ru/evidence/wtg/full/22-collection-stats.png) — 2026-09-06T21:23:19.083Z, 21841487f52489d8bafaac379b9cc08199937661.

[Отключённый legacy VNC: исторические состояния](https://komaroff-dev.ru/evidence/wtg/full/23-vnc-status.png) — 2026-09-06T21:23:21.713Z, 21841487f52489d8bafaac379b9cc08199937661.

[Очереди и агрегаты операций: после загрузки данных](https://komaroff-dev.ru/evidence/wtg/full/24-operations.png) — 2026-09-06T21:50:41.187Z, 21841487f52489d8bafaac379b9cc08199937661.

[Сохранённые результаты локальной проверки публикации](https://komaroff-dev.ru/evidence/wtg/full/25-local-check.png) — 2026-09-06T21:23:25.630Z, 21841487f52489d8bafaac379b9cc08199937661.

[Группы в результатах; экран фиксирует данные стадии, доступные оператору действия и результат обработки.](https://komaroff-dev.ru/evidence/wtg/full/26-results-groups.png) — 2026-09-06T21:37:56.997Z, 21841487f52489d8bafaac379b9cc08199937661.

[История расписания за 24.06.2026](https://komaroff-dev.ru/evidence/wtg/full/27-schedule-history.png) — 2026-09-06T21:23:38.557Z, 21841487f52489d8bafaac379b9cc08199937661.

[Извлечённые товары; экран фиксирует данные стадии, доступные оператору действия и результат обработки.](https://komaroff-dev.ru/evidence/wtg/full/28-results-products.png) — 2026-09-06T21:37:58.150Z, 21841487f52489d8bafaac379b9cc08199937661.

[Извлечённые услуги; экран фиксирует данные стадии, доступные оператору действия и результат обработки.](https://komaroff-dev.ru/evidence/wtg/full/29-results-services.png) — 2026-09-06T21:37:59.986Z, 21841487f52489d8bafaac379b9cc08199937661.

[Дневные графики расписания; экран фиксирует данные стадии, доступные оператору действия и результат обработки.](https://komaroff-dev.ru/evidence/wtg/full/30-schedule-charts.png) — 2026-09-06T21:26:20.496Z, 21841487f52489d8bafaac379b9cc08199937661.

[Мобильный вид результатов; зафиксированные ограничения таблицы](https://komaroff-dev.ru/evidence/wtg/full/31-results-mobile.png) — 2026-09-06T21:38:03.366Z, 21841487f52489d8bafaac379b9cc08199937661.

[Telegram WebApp: выбор города без пользовательской сессии](https://komaroff-dev.ru/evidence/wtg/full/32-telegram-profile.png) — 2026-09-06T21:50:51.803Z, 21841487f52489d8bafaac379b9cc08199937661.

[MAX WebApp: выбор города без пользовательской сессии](https://komaroff-dev.ru/evidence/wtg/full/33-max-profile.png) — 2026-09-06T21:50:58.987Z, 21841487f52489d8bafaac379b9cc08199937661.

[Публичный лендинг «Где движ»](https://komaroff-dev.ru/evidence/wtg/full/34-gde-dviz-landing.png) — 2026-09-06T21:38:05.429Z, 21841487f52489d8bafaac379b9cc08199937661.

[Материалы](https://komaroff-dev.ru/downloads/wtg-evidence.zip)
