# re-publisher

Версия: be01bfe3995fdd2fa481038cf74fc5f6ef8c8689

Развёрнут исходный re-publisher: FastAPI-интерфейс, PostgreSQL, миграции, редакционный pipeline и команды Telegram-коллектора. Моковая демонстрационная оболочка заменена рабочим приложением. Подключение Telegram и моделей ожидает настроек владельца.

## Границы

- Telegram API ID/hash и авторизованная MTProto-сессия пока не предоставлены. Сбор реальных сообщений ещё не запущен.
- Активная tfidf_logreg.joblib и параметры выбранного LLM отсутствуют. Нет оснований заявлять проверенное качество классификации или рерайта.
- В интерфейсе сейчас пустая рабочая БД. Синтетический корпус из прежнего демо не подмешан в исходные таблицы.
- Внешняя публикация не проверена: нужен выбранный канал и BOT_TOKEN или MAX-настройки. AUTO_PUBLISH остаётся false до настройки назначения.

## Архитектура

- Запущен app.web.main:app из исходного приложения, а не app.portfolio.
- PostgreSQL с исходными миграциями; отдельные постоянные каталоги sessions, media, models, cache, artifacts и reports.
- Collector и full-cycle pipeline описаны отдельными службами профиля connected. Они активируются после настройки Telegram-сессии, модели и выбранных интеграций.
- Административный интерфейс закрыт HTTPS Basic Auth; секреты находятся вне репозитория.

## Сценарии

- Войти в рабочий интерфейс владельца и открыть Материалы, Черновики, Разметку, Модели и Конвейер.
- Открыть Прогресс рерайта, Промпты и Поиск: используются исходные страницы и обращения к PostgreSQL.
- После настройки Telegram: app.main login/login-qr → inspect-folder → ограниченный sync → проверка материалов.
- После регистрации модели и настройки LLM: обработка → классификация → черновик → проверка → одобренная публикация в выбранный канал.

## Проверка

- Исходный Docker-образ собран в GitHub CI. Применены миграции PostgreSQL.
- Все 11 основных страниц навигации отвечают HTTP 200 после входа, ошибок JavaScript нет.
- Гостевой запрос получает 401. /health подтверждает доступность web и БД.
- Сбор Telegram, работа моделей и публикация не проверены из-за отсутствующих настроек; эти этапы не объявлены завершёнными.

## Измерения

- Пять последовательных HTTPS GET с VPS к самому себе: 81.5–228.6 ms, все HTTP 200. Это не нагрузочный тест и не оценка внешней сети.
- В замерах не запускались Telegram-сбор, LLM или задача Codex.

## Эксплуатация

- Образ Dockerfile.runtime собирается вне VPS. Web запускается командой uvicorn app.web.main:app --host 0.0.0.0 --port 8080.
- Настройки рабочего запуска: /srv/portfolio/publisher/.env; дополнительные интеграции: /srv/portfolio/publisher/integrations.env. Значения секретов не публикуются.
- После настройки коллектора создать сессию через app.main login-qr или login. Не импортировать старые WTG-данные: WTG удалён и не является источником восстановления.
- Модель регистрируется штатным app.content.model_registry register-initial-model из предоставленного владельцем пакета. Начальный sync ограничен 20 сообщениями на чат.
- AUTO_PUBLISH не включать без настроенного канала назначения. При работе с настоящими данными сохранять закрытый доступ к административным экранам.

## Code-map

| Функция | Экран / API | Модуль | Данные / проверка |
|---|---|---|---|
| Сбор | Telegram MTProto | app/main.py; app/collector.py | TG session → telegram_posts; подключение ожидает данных |
| Рабочий интерфейс | /processed, /drafts, /pipeline | app/web/main.py; app/web/templates | 11 основных GET-разделов проверены |
| Классификация | Pipeline / модели | app/content/model_registry.py; pipeline_manager.py | model_versions; active joblib пока отсутствует |
| Редакционная обработка | Рерайт / промпты | app/content/pipeline_rewriter.py; prompt_versions.py | PublicationDraft / RewriteAttempt; внешние модели не проверены |
| Эксплуатация | /health; Docker Compose | Dockerfile.runtime; app/config.py; alembic | реальные PostgreSQL и миграции; доступ по паролю |

