Техническая документация

re-publisher

Архитектура, сценарии, code-map и эксплуатация.
Версия b13048fbc549 · подготовлено 7 сентября 2026

Назначение и границы

Редакционный конвейер должен отделять исходник, промежуточные признаки и черновик, чтобы результат можно было проверить и повторить после ошибки.

Очистка текста, извлечение HTML, классификация и подготовка черновика с видимыми этапами обработки. В публичном контуре отключены внешний сбор и публикация.

  • Telegram input заменён тремя собственными материалами; LLM заменена шаблонным редактором.
  • Шесть обучающих примеров не позволяют заявлять качество классификатора на независимых данных.
  • Внешняя публикация и произвольные URL/загрузки отключены. Два одновременных выполнения, 20 материалов на сессию, TTL один час.

Архитектура и схемы

  • Публичная точка входа не монтирует collector и операционный admin.
  • Используются исходные processed_values, extract_html, predict и draft_from_template.
  • TF-IDF и LogisticRegression выполняются реально на фиксированном синтетическом наборе.
  • Повтор управляемого сбоя обновляет тот же run ID, сохраняя принадлежность сессии.
Компоненты опубликованного демо
Компоненты опубликованного демо · Mermaid ↓
Основной сценарий
Основной сценарий · Mermaid ↓
Размещение опубликованной версии
Размещение опубликованной версии · Mermaid ↓
Состав данных и границы хранения
Состав данных и границы хранения · Mermaid ↓
Исходный интеграционный контур — не развёрнут в демо
Исходный интеграционный контур — не развёрнут в демо · Mermaid ↓

Code-map: от функции к коду

Карта привязана к версии b13048fbc549. Она помогает проследить изменение через интерфейс, API, модуль, данные и проверку.

ФункцияЭкран / APIМодульДанные / проверка
Выбор материалаформа / GET api/runsportfolio_web/app.js, portfolio_pipeline.CORPUSсинтетический корпус; production browser QA
ОчисткаPOST api/runscontent/processor.processed_valuestext_hash, язык, признаки; test_content_utils.py
ИзвлечениеPOST api/runscontent/link_enricher.extract_htmlтекст HTML; test_portfolio_pipeline.py
Классификациярезультатcontent/classifier.predictTF-IDF модель; test_portfolio_pipeline.py
Черновикрезультатcontent/rewriter.draft_from_templateportfolio_runs.result; test_portfolio_pipeline.py
Повтор и сбросPOST retry / DELETE runsportfolio.pyтолько своя session_id; production API isolation QA

Как работать с картой

  1. Перед изменением найти функцию и пройти связи до API, состояния и хранилища.
  2. Проверить входы, ошибки, повторные события и зависимые сценарии.
  3. После изменения обновить карту и затронутые схемы вместе с кодом.
  4. Выполнить связанные проверки и привязать новые материалы к версии исходников.

Сценарии и API

  1. Выберите один из трёх материалов и запустите обработку.
  2. Просмотрите очищенный текст, извлечение, классификацию и черновик.
  3. Включите пример ошибки извлечения, затем повторите тот же материал.
  4. Сравните свою историю со второй сессией и сбросьте свой пример.

Проверка опубликованной версии

CI: Deploy ↗ · 8507a93a · исторический запуск другой версии · 2026-06-30T07:10:27Z

CI: Deploy ↗ · 4c8bb882 · исторический запуск другой версии · 2026-06-25T09:47:34Z

  • 46 unit-тестов pipeline и исходных content-модулей пройдено.
  • Other session cannot read/retry/reset own material; signed expiring cookie
  • Failure then retry uses same ID; retry ready draft returns 409
  • Only fixed fixture IDs; arbitrary URL and extra fields rejected
  • Подтверждённого GitHub CI для этого SHA нет; перечислены выполненные локальные проверки и сценарии опубликованной версии. Исторические CI-ссылки, если есть, отмечены отдельно.

Результаты описывают проверенные сценарии и конкретную версию. Они не являются оценкой коммерческого успеха или качества моделей на независимой выборке.

Измерения

Суммарные ресурсы контейнеров проекта · 2026-09-07T01:08:27 — 01:11:22 UTC
Суммарные ресурсы контейнеров проекта · 2026-09-07T01:08:27 — 01:11:22 UTC · Исходные данные ↓
Измеренные повторения сценария через HTTPS · 2026-09-07T01:08:36 UTC; ограничения методики в JSON
Измеренные повторения сценария через HTTPS · 2026-09-07T01:08:36 UTC; ограничения методики в JSON · Исходные данные ↓
  • Сохранено 13 содержательных кадров фактического интерфейса.
  • Дата, сценарий и версия указаны у каждого кадра.
  • Максимум RAM контейнеров в коротком тесте: 213.2 MiB. Общие службы учитываются отдельно; магазин включает свою БД.
  • Измерено 6 повторений сценария; медиана 1730.0 мс, максимум 2992 мс. Время включает браузер и HTTPS; методика и ограничения приложены.

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

Исходный контур содержит Telegram collector и рабочую схему хранения. Демо использует отдельную таблицу portfolio_runs и отдельный entrypoint; эти архитектуры не отождествляются.

Сборка: docker build -f Dockerfile.portfolio -t portfolio-publisher:VERSION . Полный requirements.portfolio.lock закрепляет runtime. DB_DSN и PORTFOLIO_SECRET передаются на сервере и не входят в образ.

API доступен через localhost:18404. Healthcheck /healthz проверяет БД. При ошибке изучить stage result и повторить тот же run ID; записи другой сессии недоступны. Cleanup каждые пять минут. Исходный workflow заменён ручной проверкой без SSH/prune/удаления логов.

Общие правила эксплуатации: готовые файлы и закреплённые образы собираются вне VPS; секреты не входят в артефакты. Общесерверный docker prune не применяется. Логи backend ограничены ротацией, изменения log options требуют пересоздания контейнера.

Перед изменением пройти code-map от функции к экрану/API, модулю и данным. После изменения обновить карту и схемы, выполнить связанные сценарии, включая ошибку, повтор и сброс. Источник истины — конкретная версия кода, а не старая диаграмма.

Откат проверен 2026-09-07T01:05:09.948422+00:00: 20260907-verified → 20260907b → 20260907-verified. После каждого переключения подтверждены HTTPS, readiness и SHA. Это проверка конфигурации и артефактов на одном проверенном SHA; обратная миграция БД не выполнялась.

Стек

Python / FastAPIОтдельный публичный runtime, лимиты и HTTP-контракты.
trafilatura / BeautifulSoupРеальное извлечение текста из встроенного HTML.
scikit-learnTF-IDF + LogisticRegression с фиксированным random_state.
PostgreSQLСессионные результаты pipeline в JSONB, TTL и атомарная квота.

Материалы и исходники

История кода: с 16 июня 2026. Подготовка демо: 7 сентября 2026.