diff --git a/STATUS.md b/STATUS.md index 0d5c104..5ee4593 100644 --- a/STATUS.md +++ b/STATUS.md @@ -138,6 +138,25 @@ CLASSIFY_TIMEOUT=20 .venv/bin/python -m classifier.classify --db db/vesti.db --l - Извлечение источников из чужих постов + сервис поиска источников в интернете (дообогащение ТОЛЬКО одобренных) - Страница управления источниками (CRUD + фильтр по типу: Telegram, RSS, почта, сайты, Twitter) +## Сделано (сессия кандидаты-фиксы 2026-09-14) + +Сессия посвящена трём багам страницы кандидатов, все исправлены через OpenSpec-процесс. + +- [x] **change `candidates-only-external-new`** (коммит `acb49cc`): в списке кандидатов показывались одобренные к публикации посты и «все посты как свои». + - Причина: в `_fetch_candidates` при пустом фильтре статуса НЕ было фильтрации `p.status`, поэтому в список попадали published (6) и rejected (3); а 846 постов обратного филла своего канала @dedinit (`is_own=1`, status=new) при группировке по дате заполняли группы 04-06.2026 полностью и выглядели «своими» (⭐), хотя пользователь их не одобрял. + - Решение (по выбору пользователя, вариант B): жёстко `p.is_own=0 AND p.status='new'` — кандидаты = только внешние new-посты. Свои посты канала не кандидаты, управляются через fan-out/«Свои». + - Итог: 164→163 поста, все внешние new; группы 04-06.2026 (чисто свои) исчезли; 0 бейджей «СВОЙ». +- [x] **change `keep-candidates-context`** (коммит `0999424`): после «Отклонить» при группировке по дате открывалась пустая страница («нет кандидатов по фильтру») и фильтр сбрасывался на «источник». + - Баг 1: жёсткое `p.status='new'` конфликтовало с явным `?status=rejected` (`new AND rejected` = пусто). + - Баг 2: редирект после reject жёстко шёл на `/candidates?status=rejected` без `group_by`. + - Решение: жёсткое `new` только при пустом статусе; явный статус — единственный фильтр. Хелпер `_cand_back()` строит URL возврата с сохранением group_by/direction/own/q; во все формы правой панели (approve/reclassify/rewrite/reject/comment) добавлены скрытые поля контекста. + - Итог: `?status=rejected` показывает 4 поста (не пусто); после reject остаёшься в своей группировке. + +### Итоговое состояние страницы кандидатов (после сессии) +- Список: только внешние new-посты (сейчас 163), без published/rejected и без своих. +- Группировка (date/source/status) и фильтры сохраняются после любых действий из правой панели. +- Тихие OpenSpec-change: `candidates-only-external-new`, `keep-candidates-context` — задачи [x], валидны; архивировать после подтверждения. + ## Ключевые артефакты - /opt/vesti/AGENT.MD — правила проекта (обязательно: все изменения через OpenSpec) - /opt/vesti/openspec/changes/{deexternalize-web-assets, web-render-markdown, web-format-datetime, web-list-filter-no-js}/ — 4 change веб-интерфейса (валидны, задачи [x])