# WTG

Архивный кейс операционной системы: сбор публикаций, очереди, OCR, классификация, проверка и выдача материалов. Сервис полностью выведен из эксплуатации; остались обезличенные экраны и технические доказательства.

Статус: архив; удалён

Версия: `21841487f52489d8bafaac379b9cc08199937661`. Документы code-map: июнь 2026, сохранённая история данных: июнь–июль. Архивирование и удаление: 7 сентября 2026.

## Задача

Многоэтапная обработка публикаций требует прослеживаемости: от источника и задания до OCR, классификации, решения оператора и итогового материала.

## Аудитория

Операторы обработки контента и разработчики фоновых data-процессов.

## Личный вклад

- Прикладной контур сбора, очередей, обработки и операторского review.

- Административные экраны, модели данных и карта зависимостей code-map.

- Архивирование фактического интерфейса и агрегатов, анализ ограничений и полный вывод runtime из эксплуатации.

## Решения

- Сбор и долгая обработка вынесены в задания с lease/heartbeat.

- OCR отделён от web и имеет самостоятельные очередь, статусы и попытки.

- Исходная публикация, промежуточные решения и итоговые материалы имеют разные роли.

- Архив содержит только обезличенные изображения, документацию и агрегаты; рабочая БД, сессии и резервные копии не сохранены.

## Границы и ограничения

- Архивный проект; сервис выведен из эксплуатации. Демо-ссылки и восстановления WTG нет.

- Статусы заданий и confidence не являются измерением точности OCR или моделей.

- Legacy noVNC и недоступные разделы не выдаются за работающие.

- Обнаруженный рост web до примерно 3,8 GiB описан как наблюдение; первопричина кода не установлена.

## Что попробовать

- Просмотрите обезличенные расписания, группы, pipeline и материалы.

- Сопоставьте экран со строкой code-map и схемой данных.

- Откройте агрегаты очередей и истории, прочитайте дату и ограничения замера.

- Изучите акт удаления и сравнение диска/RAM до и после вывода из эксплуатации.

## Проверки

- 30 sanitized UI images checked before deletion

- Deletion and authoritative DNS removal verified

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

- Сохранено 30 содержательных кадров фактического интерфейса.

- Дата, сценарий и версия указаны у каждого кадра.

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

- WTG удалён после проверки локального архива; до очистки его каталог занимал около 104 GiB.

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

- WTG не входит в механизм отката портфолио. /opt/wtg, собственные контейнеры, данные, бэкапы, доступы, конфигурации и DNS удалены после проверки локального архива.

- GitHub-исходники и общие журналы ОС сохранены по согласованному решению. Отдельные workflow автодеплоя отключены, WTG-ключи удалены.

- Результат подтверждает логическое удаление управляемых данных. Физическое стирание блоков хранилища провайдера из гостевой VPS подтвердить невозможно.

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

## Стек и роль

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

## 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 использует подготовленные данные|

## Схемы

- Наблюдавшаяся архитектура до удаления — `diagrams/architecture.mmd`
- Модель данных до удаления — `diagrams/data-model.mmd`
- Прежнее размещение: семь контейнеров — `diagrams/deployment.mmd`
- Последовательность обработки до удаления — `diagrams/processing-sequence.mmd`
- Историческая целевая архитектура из исходников; не план возобновления WTG — `diagrams/target-processing-layers.mmd`

## Индекс изображений

- 01-schedules: Расписания сбора и обработки; 2026-09-06T21:16:48.230Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 02-accounts: Состояния аккаунтов; профили и идентификаторы скрыты; 2026-09-06T21:37:46.883Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 03-group-pool: Глобальный пул групп; 2026-09-06T21:16:57.865Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 04-processing: Обработка, очередь OCR и сохранённый запуск teacher; 2026-09-06T21:22:48.059Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 05-results: Канонические публикационные материалы; 2026-09-06T21:37:50.167Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 06-groups: Список сообществ; 2026-09-06T21:22:52.400Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 07-market: Каталог товаров; 2026-09-06T21:22:55.701Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 08-pipeline: Pipeline: операторский обзор; 2026-09-06T21:52:00.656620+00:00; SHA 21841487f52489d8bafaac379b9cc08199937661
- 09-labels: Разметка и метки; 2026-09-06T21:52:00.656620+00:00; SHA 21841487f52489d8bafaac379b9cc08199937661
- 10-logs: Журнал заданий; 2026-09-06T21:22:57.278Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 11-file-logs: Файловые журналы с редактированием чувствительных блоков; 2026-09-06T21:23:03.321Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 12-group-overview: Карточка сообщества: обзор; 2026-09-06T21:23:06.094Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 13-group-posts: Карточка сообщества: исходные публикации; 2026-09-06T21:23:08.507Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 14-group-market: Карточка сообщества: товары; 2026-09-06T21:23:10.026Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 15-group-profile: Карточка сообщества: профиль; 2026-09-06T21:23:11.568Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 16-source-post: Исходная публикация и результаты обработки; 2026-09-06T21:23:13.647Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 17-pipeline-item: Карточка элемента pipeline; 2026-09-06T21:23:15.568Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 22-collection-stats: История и статистика сбора; 2026-09-06T21:23:19.083Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 23-vnc-status: Отключённый legacy VNC: исторические состояния; 2026-09-06T21:23:21.713Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 24-operations: Очереди и агрегаты операций: после загрузки данных; 2026-09-06T21:50:41.187Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 25-local-check: Сохранённые результаты локальной проверки публикации; 2026-09-06T21:23:25.630Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 26-results-groups: Группы в результатах; 2026-09-06T21:37:56.997Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 27-schedule-history: История расписания за 24.06.2026; 2026-09-06T21:23:38.557Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 28-results-products: Извлечённые товары; 2026-09-06T21:37:58.150Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 29-results-services: Извлечённые услуги; 2026-09-06T21:37:59.986Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 30-schedule-charts: Дневные графики расписания; 2026-09-06T21:26:20.496Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 31-results-mobile: Мобильный вид результатов; зафиксированные ограничения таблицы; 2026-09-06T21:38:03.366Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 32-telegram-profile: Telegram WebApp: выбор города без пользовательской сессии; 2026-09-06T21:50:51.803Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 33-max-profile: MAX WebApp: выбор города без пользовательской сессии; 2026-09-06T21:50:58.987Z; SHA 21841487f52489d8bafaac379b9cc08199937661
- 34-gde-dviz-landing: Публичный лендинг «Где движ»; 2026-09-06T21:38:05.429Z; SHA 21841487f52489d8bafaac379b9cc08199937661

## Архивный технический обзор

# WTG — сбор, обработка и подготовка публикационных материалов

Статус пакета: архивный кейс после полного вывода WTG из эксплуатации 07.09.2026. Удаление подтверждено в retirement.md и повторной проверкой отсутствия runtime/data. Разделы ниже описывают наблюдения до удаления.

WTG объединяет сбор публикаций и сведений о сообществах VK, нормализацию, OCR изображений, извлечение публикационных материалов и операторскую проверку. Telegram- и MAX-компоненты используют подготовленные данные. Это прикладная система с административным интерфейсом, очередями и историей обработки.

## Что подтверждено непосредственно

07.09.2026 через SSH и браузер исследована работающая VPS. На первом замере были запущены семь контейнеров WTG: web, scheduler, OCR worker, PaddleOCR sidecar, Telegram bot, MAX bot и PostgreSQL. Всего на сервере было 13 контейнеров, включая магазин и Codex proxy.

SQL-подсчёт зафиксировал 75 366 сообществ, 527 718 публикаций, 824 349 решений классификатора, 277 498 материалов и 29 092 OCR-задания. Эти сущности имеют разные значения: одна публикация может иметь несколько версий решения и несколько материалов. Их нельзя складывать или представлять числом уникальных успешных публикаций.

Из OCR-заданий 17 222 имеют состояние completed, 11 870 — failed. Это история состояния очереди, а не оценка точности OCR. Сохранённый confidence также не является измеренной точностью модели.

## Технологии и их роль

Python обслуживает сборщики, планирование и обработку. FastAPI отдаёт HTML и JSON API. Jinja, Bootstrap и небольшой JavaScript формируют операционную админку. SQLAlchemy и Alembic обеспечивают модели и миграции PostgreSQL. PaddleOCR работает в отдельном сервисе. Playwright использовался для ручной авторизации и браузерного пути сбора. Docker Compose, Nginx и systemd обеспечивали эксплуатацию.

publication-intelligence выделяет детерминированную классификацию и извлечение материалов в независимый пакет; WTG связывает его с БД и review-процессом. В документации предусмотрено опциональное обогащение внешней LLM. В ходе архивирования внешняя LLM и новый сбор не запускались.

## Рабочий сценарий

1. Оператор подключает аккаунт и проверяет отдельно браузерную сессию и API-доступ.
2. Список групп формирует пул и расписание проверок. Фоновая задача получает lease и фиксирует heartbeat.
3. Сборщик сохраняет публикацию, метаданные и медиа. Повторная обработка опирается на идентичность источника.
4. Локальный фильтр и быстрый OCR отделяют очевидные случаи; сложные изображения поступают в очередь PaddleOCR.
5. Классификатор сохраняет версионированное решение и нормализованные материалы.
6. Оператор сравнивает исходник, OCR, классификацию и разметку. Готовые данные доступны downstream-компонентам.

## Инженерные решения

- Долгая обработка вынесена из пользовательского действия в задания и worker-процессы.
- Исходная публикация, промежуточные результаты и итоговый материал разделены: можно объяснить происхождение результата.
- OCR отделён от web-сервиса, а его задания имеют статусы, попытки и блокировки.
- Canonical publication output отделён от старого pipeline evidence/review слоя.
- API polling и браузерная авторизация имеют самостоятельные состояния и ограничения.
- Карта кода связывает интерфейс, очередь, обработчик, модели и тесты, чтобы изменения оставались прослеживаемыми.

## Ограничения и фактическое состояние

Часть интерфейса показывает исторические состояния июня–июля. Статус running со старым heartbeat не доказывает текущую обработку. На экране группы выявлены отменённый проход, rate_limited и отсутствие service token. Legacy noVNC-маршруты не имели работающих слушателей при исходном аудите.

Во время просмотра тяжёлого раздела web-процесс вырос примерно до 3,8 GiB и перестал отвечать на healthcheck. Это наблюдение эксплуатации; точная первопричина в коде не локализована. После перезапуска только web-контейнера, ограничения его памяти до 2 GiB и остановки scheduler/OCR worker ограниченные страницы снова открывались. Повторно нагружать рабочую БД ради проблемного экрана не требовалось.

До очистки каталог WTG занимал около 104 GiB, в том числе около 75 GiB резервных копий и 27 GiB PostgreSQL. В backup-скрипте ротация выполнялась после успешного dump: переполнение диска мешало созданию новой копии и последующей ротации. Архивные файлы не проверялись восстановлением и не сохраняются этим пакетом.

## Даты и версии

Документация code-map датирована 22.06.2026; в данных есть история работы июня–июля 2026. Дата архивной съёмки — 07.09.2026. Начало разработки и коммерческий результат по этим сведениям не устанавливаются.

Checkout исходников на VPS: `21841487f52489d8bafaac379b9cc08199937661`; рабочее дерево при сборе метаданных чистое. Публичный аудитированный репозиторий wtg-s: `b3c779a190884d708ae10bd6e68021b08bd18689`. Эти версии не отождествляются. Image ID каждого реально запущенного контейнера сохранён в агрегированном снимке; соответствие содержимого образа checkout отдельно не доказывалось.

## Как читать материалы

Галерея показывает реальные экраны с обозначенным скрытием идентификаторов. CSV и графики содержат агрегаты. Исходные дампы, cookies, browser profiles, токены, пользовательские сессии и raw payload exports в пакет не входят. Исходная документация сервера сохранена в source-reference как исторический источник, а не инструкция запускать удалённый сервис.

Исходники: https://github.com/komaroffsergei/wtg-s

# Акт вывода WTG из эксплуатации

Дата: 07.09.2026, Москва. Основание: утверждённый владельцем план визуального портфолио.

Перед удалением локально проверены 30 PNG, 6 графиков, 4 исходника Mermaid и 4 экспорта SVG, 7 Markdown-документов. База, авторизационные сессии и рабочие данные не копировались. После удаления добавлены этот акт, сравнительный график и агрегаты.

## Выполнено на сервере

- Отключены три prod-deploy workflow: wtg-s, wtg-telegram-bot, wtg-max-bot. Удалены WTG-секреты автодеплоя и четыре отдельных GitHub deploy keys. Репозитории сохранены.
- Остановлены и удалены семь контейнеров Compose-проекта wtg-prod, его сеть и пять эксклюзивных образов. Именованных томов WTG не было: данные находились в bind mounts.
- Полностью удалён /opt/wtg, включая PostgreSQL, media, auth, зависимости, отчёты и все серверные резервные копии.
- Удалены ошибочные каталоги в домашней директории, отдельные ключи WTG, записи доступа, units/timers, конфигурации Nginx, htpasswd и эксклюзивные сертификаты. Из резервных копий конфигурации магазина и proxy удалены только файлы WTG.
- Общие правила защиты SSH сохранены под нейтральным именем 00-server-hardening.conf. Общие системные журналы сохранены согласно решению владельца.
- Повторная инвентаризация не обнаружила WTG-контейнеров, образов, сетей, томов, systemd units и слушателей 8000/8010/8020/5432. Каталог /opt/wtg отсутствует. Совпадение букв wtg в случайном идентификаторе Buildx не относится к приложению: файл содержит только ссылки на сборки; оставшийся BuildKit cache относится к сохранённым приложениям.
- Проверка nginx -t и sshd -t прошла. Магазин отвечает HTTP 200; Codex proxy имеет Docker health=healthy и требует аутентификацию на внешнем адресе (HTTP 401 без учётных данных).

## DNS и провайдер

Перед удалением в панели VPS 3136262 повторно проверен раздел резервных копий: «Здесь ничего нет», расписаний нет. В панели DNS удалены записи wtg, gde-dviz, gde-dviz-app. После распространения зоны повторные запросы к авторитетным ns1/ns2/ns3 не обнаружили A-записей этих трёх сервисов.

## Измерения

Перед: 2026-09-06T21:03:45.430903+00:00. После: 2026-09-06T21:58:27.625880+00:00. Свободное место для непривилегированного процесса: 6.16 → 122.40 GiB. MemAvailable: 5.22 → 6.28 GiB. Это два снимка сервера с разной текущей нагрузкой, не нагрузочный бенчмарк. Во время архивирования был отдельно зафиксирован рост памяти WTG web; он описан в overview.md.

Лог действий: metrics/retirement-server.json. Сравнение: charts/before-after.svg и metrics/before-after.csv. Серии Docker stats до и после: соответствующие JSON в metrics.

Удаление является логическим удалением управляемых данных. Копии для восстановления WTG не сохранялись. Физическое стирание блоков хранилища провайдера из гостевой VPS подтвердить невозможно. GitHub-исходники и обезличенный кейс намеренно сохранены и не позволяют восстановить рабочую БД или сессии.
