# selected-list: список отобранных между кандидатами и опубликованными ## Улучшение Сейчас пайплайн «кандидаты → опубликованные» без промежуточного шага: - Кандидаты (new): куча новых постов, классификация всех через LLM (токены), обработка (comment/approve/reject/reclassify/rewrite) прямо здесь — всё сразу. - Пользователь: «репост никому не интересен, подпишутся на первоисточник» — нужен собственный подготовленный пост. Отбираем понравившееся руками, готовим свой пост уже в отобранных. ## Изменения ### Новый статус `selected` - `posts.status`: добавляем значение `selected` («отобранный»). - Кандидаты = `status='new'` (внешние). Отобранные = `status='selected'` (внешние). - Свой контент (is_own=1) — не кандидаты и не отобранные (управляется отдельно). ### Веб - **Кандидаты (`/candidates`)**: только «⭐ Отобрать» (single + bulk `select`). БЕЗ approve/reject/comment/reclassify/rewrite — обработка живёт в отобранных. Кнопки «Обработать моделью/Переписать/Отклонить/Опубликовать/комментарий» — убираем. - **Отобранные (`/selected`)**: новый экран, полный функционал: - карточки слева (как кандидаты), статус selected - справа: бейджи, комментарий, «✅ Опубликовать», «💾 Сохранить комментарий», «🤖 Обработать моделью» (reclassify), «✍️ Переписать» (rewrite), «💾 Сохранить пересказ», «🚫 Отклонить» - bulk: approve / reject / process / select - `published` — без изменений. ### Редактор всегда виден В отобранных рядом с оригиналом поста — поле редактирования (textarea `rewritten_text`): - показывается ВСЕГДА (не только если уже есть пересказ) - в него кладётся результат «✍️ Переписать» (rewrite) - редактируется вручную - при публикации (approve) — body = rewritten_text если есть, иначе оригинал (уже так в card.py) ### Экономия токенов - Краулер НЕ классифицирует новые (сейчас и так worker не в кроне; classified остаётся 0). - Классификация — только по кнопке «🤖 Обработать моделью» В ОТОБРАННЫХ (reclassify на selected).