docs: закрытие сессии кандидаты-фиксы 2026-09-14

This commit is contained in:
kpa39l
2026-09-14 17:48:31 +00:00
parent 0999424baa
commit e9f7c96e84
+19
View File
@@ -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])