Files
vesti/TODO.md
T

61 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TODO — VESTI
Формат: | дата | задача | статус | закрыта в |
|---|---|---|---|
| 2026-09-08 | Инициализировать OpenSpec-проект /opt/vesti, change tg-crawler-publisher-prototype | ✅ закрыта | сессия старта |
| 2026-09-08 | Артефакты change: proposal, design, specs (5), tasks | ✅ закрыта | сессия старта |
| 2026-09-08 | PRD.md — требования, архитектура, стек, DoD | ✅ закрыта | сессия старта |
| 2026-09-08 | Каркас проекта: каталоги, venv, requirements.txt | ✅ закрыта | сессия старта |
| 2026-09-08 | Конфиг+БД: config.py, schema.sql (6 таблиц), db.py | ✅ закрыта | сессия старта |
| 2026-09-08 | sources.yaml (8 линукс-каналов), sources.py (синк+запуски) | ✅ закрыта | сессия старта |
| 2026-09-08 | crawler/telegram_crawler.py + auth_telegram.py | ✅ закрыта | сессия старта |
| 2026-09-08 | Починить telegram-tunnel (SSH-форвард :1080 до VPS01) | ✅ закрыта | 2026-09-08 |
| 2026-09-08 | Авторизовать Telethon-сессию (@kpa39l, 2FA) | ✅ закрыта | 2026-09-08 |
| 2026-09-08 | Краулер: собрать первые посты (137 с 8 каналов) | ✅ закрыта | 2026-09-08 |
| 2026-09-08 | Форварды: дедуп по fwd_from (свой источник → пропуск, чужой → сирота без медиа) | ✅ закрыта | 2026-09-08 |
| 2026-09-08 | Классификатор: keywords.py + classify.py (Ollama qwen3:8b-nothink, /v1, таймаут) | ✅ закрыта | 2026-09-08 |
| 2026-09-08 | Бот-публикатор: card.py + bot.py (Bot API, dry-run) | ✅ закрыта | 2026-09-08 |
| 2026-09-08 | Веб: FastAPI+Bootstrap 5.3+Jinja2+HTMX, :8400, approve/reject+бандл | ✅ закрыта | 2026-09-08 |
| 2026-09-08 | Банк статей: markdown-бандлы с frontmatter + media | ✅ закрыта | 2026-09-08 |
| 2026-09-08 | **own-content-hub**: спроектировать change | ✅ закрыта | 2026-09-08 (openspec validate чист) |
| 2026-09-08 | **own-content-hub**: миграция БД (migrate_own.py) | ✅ закрыта | 2026-09-08 |
| 2026-09-08 | **own-content-hub**: sources.yaml +dedinit (own:true) | ✅ закрыта | 2026-09-08 |
| 2026-09-08 | **own-content-hub**: краулер own-семантика | ✅ закрыта | 2026-09-08 |
| 2026-09-08 | **own-content-hub**: классификатор critical + мультинаправления | ✅ закрыта | 2026-09-08 (test linux+ai) |
| 2026-09-08 | **own-content-hub**: публикатор publish_multi + get_views_multi + карточка с атрибуцией | ✅ закрыта | 2026-09-08 (dry-run 2 направления) |
| 2026-09-08 | **own-content-hub**: веб «Свои», чекбоксы направлений, distributed_dirs | ✅ закрыта | 2026-09-08 |
| 2026-09-08 | **own-content-hub**: бандлы origin:own + source_url + author | ✅ закрыта | 2026-09-08 |
| 2026-09-08 | **own-content-hub** 2.3: бэкфилл @dedinit (~1092 постов is_own=1) | ✅ закрыта | 2026-09-10 (backfill_dedinit.py, fetched=1040, max_post_id=1092, 846 в БД) |
| 2026-09-08 | **own-content-hub**: повторный approve-тест после async form | ✅ закрыта | 2026-09-09 (реальный approve 136,137 через publisher-service) |
| 2026-09-08 | VESTI_BOT_TOKEN (реальная публикация) | ✅ закрыта | 2026-09-09 (тестовый пост message_id=2) |
| 2026-09-09 | **publisher-service**: OpenSpec change (proposal/design/spec/tasks), validate | ✅ закрыта | 2026-09-09 |
| 2026-09-09 | **publisher-service**: FastAPI-микросервис services/publisher/ (publish/healthz/views) | ✅ закрыта | 2026-09-09 (healthz ok, реальный publish message_id=2) |
| 2026-09-09 | **publisher-service**: web переключён на HTTP-клиент (publisher_client.py) | ✅ закрыта | 2026-09-09 |
| 2026-09-09 | **publisher-service**: Docker (compose up) + healthcheck | ✅ закрыта | 2026-09-09 (vesti-publisher Up healthy, healthz: bot/proxy/channels ok) |
| 2026-09-09 | Реальный approve через веб (сквозной путь с микросервисом) | ✅ закрыта | 2026-09-09 (посты 136,137 → @dedinit_vesti, tg_message_id 3,4) |
| 2026-09-09 | Web-фиксы: 500 /candidates (raise RedirectResponse) + tg_message_id для внешних | ✅ закрыта | 2026-09-09 |
| 2026-09-10 | **Медиа в Docker**: publisher маунт ../../media/media:/srv/publisher/media | ✅ закрыта | 2026-09-10 (контейнер пересобран, healthy) |
| 2026-09-10 | Веб :8400 перезапущен (после падения); юнит vesti-web.service | ✅ закрыта | 2026-09-10 (запущен; юнит подхватится при перезагрузке — daemon-reload зависает на bigbox) |
| 2026-09-10 | Cron per-source + тихий watchdog | ✅ закрыта | 2026-09-10 (crawler `*/30`, watchdog `*/15`; no_agent, тихие) |
| 2026-09-10 | Классификатор по неклассифицированным (870 постов) | ✅ закрыта | 2026-09-10 (обработано 870, классифицировано 391: 389 LLM + 2 словарь; 479 нерелевантных без direction) |
| 2026-09-10 | PRD v0.2 — актуализация под текущее состояние | ✅ закрыта | 2026-09-10 |
| 2026-09-11 | Web-замечания пользователя: unpkg/CDN, сырой markdown, даты ISO, ожидание CDN при фильтрации | ✅ закрыта | 2026-09-11 (4 openspec change) |
| 2026-09-11 | Веб доступен снаружи: vesti.nixg.ru через Caddy VPS02 | ✅ закрыта | 2026-09-11 (reverse_proxy 10.8.0.2:8400, LE-серт) |
| 2026-09-11 | Change `deexternalize-web-assets`: убраны htmx/unpkg и bootstrap/jsdelivr (bootstrap локален) | ✅ закрыта | 2026-09-11 (0 внешних доменов, approve/reject POST-формами) |
| 2026-09-11 | Change `web-render-markdown`: markdown-рендер (Python-Markdown, XSS-safe) | ✅ закрыта | 2026-09-11 (фильтр `markdown`, кандидаты+опубликованные) |
| 2026-09-11 | Change `web-format-datetime`: даты `ЧЧ:ММ ДД.ММ.ГГГГ` вместо ISO | ✅ закрыта | 2026-09-11 (фильтр `dt`, candidates/published/metrics) |
| 2026-09-11 | Change `web-list-filter-no-js`: фильтрация GET-формами без JS/CDN | ✅ закрыта | 2026-09-11 (кнопка «Применить», без ожидания CDN) |
| 2026-09-11 | Баг бандлов: двойной слэш `/bundle//opt/vesti/...` в published | ✅ закрыта | 2026-09-11 (create_bundle → относительный путь, 4 строки БД обновлены) |
| 2026-09-11 | AGENT.MD — правила проекта (все изменения через OpenSpec) | ✅ закрыта | 2026-09-11 |
| 2026-09-09 | git-репозитории (gitverse истина, gitea зеркало) — /opt/vesti НЕ git-репо | 🔵 открыта | |
| 2026-09-08 | openspec archive web-изменений + own-content-hub + publisher-service (после подтверждения) | 🔵 открыта | |
| 2026-09-13 | После перезагрузки не поднялся веб :8400 (юнит vesti-web был disabled) + publisher возвращён с user-юнита на Docker | ✅ закрыта | 2026-09-13 (vesti-web enabled; docker compose up -d --build; vesti-publisher healthy; watchdog переписан на docker-проверку) |
| 2026-09-13 | Бэкап VESTI на Яндекс.Диск (по аналогии icq/netbox) | ✅ закрыта | 2026-09-13 (backup.sh + backups/ + ЯД vesti-backups, cron root 45 2) |
| 2026-09-13 | approve → 500 (UnboundLocalError 'dirn' в web/app.py) | ✅ закрыта | 2026-09-13 (change fix-approve-dirn; dirn/lang перенесены до использования; 303 вместо 500) |
| 2026-09-13 | Медиа в карточках новостей не отображаются | ✅ закрыта | 2026-09-13 (change web-media-preview; роут /media/{filename} + превью img/video в candidates/published; клик → полноразмер в новой вкладке) |
| 2026-09-13 | Пост без классификации: на карточке значок «?» — понять его роль; если классификации нет — дать возможность вручную указывать/изменять/добавлять направление при анализе | 🔵 открыта | |
| 2026-09-13 | git-репозиторий /opt/vesti (gitverse истина, gitea зеркало) | ✅ закрыта | 2026-09-13 (git init + commit; gitverse kpa39l/vesti main; gitea estorozhenko/vesti mirror 8h; .gitignore: backups/media/db/bundles/logs исключены) |
| 2026-09-13 | Интерфейс кандидатов: разделить окно на 2 панели — слева список кандидатов, справа меню действий с постом (опубликовать / отклонить / переклассифицировать / переписать новость под себя), ниже блок для моего комментария, потом оригинальный пост со всеми медиа | 🔵 открыта | (зафиксирована, проработать подробности) |
| 2026-09-13 | Контент-стратегия: не перепубликовать чужие новости, а публиковать переписанные от себя (персональный контент, добавление ценности). Связано с «переписать новость под себя» в интерфейсе кандидатов — нужна генерация пересказа через LLM + редактирование перед публикацией | 🔵 открыта | (идея, проработать) |
| 2026-09-13 | Извлечение источников новостей из полученных постов (каналы/сайты, откуда пришли новости) — чтобы в следующий раз забирать новости напрямую из источника. ДОПОЛНЕНИЕ: возможно стоит разработать сервис поиска источников в интернете (если источник не указан) и ДООБОГАЩАТЬ карточки кандидатов, но — чтобы не тратить лишние деньги — ТОЛЬКО для одобренных кандидатов. Пайплайн: отбор новостей из списка кандидатов → в «выбранные» → обработка/дообогащение/переписывание при необходимости → публикация | 🔵 открыта | (зафиксирована, проработать) |
| 2026-09-13 | Отдельная страница управления источниками новостей: отображение / добавление / удаление / редактирование, фильтр по типу источника (Telegram, RSS, почтовая рассылка, прямые новости с сайтов, Twitter и т.п.) | 🔵 открыта | (зафиксирована, проработать) |