- reject/reject-old (single + bulk): редирект на /candidates с текущей
группировкой вместо /candidates?status=rejected — не прерываем отбор.
Отклонённые доступны через фильтр статуса.
- candidates.html: Обработать/Переписать/Отклонить — один ряд над полем
комментария (после переноса Опубликовать в approve-форму кнопки съехали).
changes: candidates-buttons-order, reject-stay-candidates (skip_specs, валидны).
- _fetch_candidates: жёсткое status='new' только при пустом status; явный
статус (rejected/published) — единственный фильтр статуса → ?status=rejected
больше не даёт пустой список
- формы approve/reclassify/rewrite/reject/comment: скрытые поля
group_by/direction/own/q — контекст страницы
- POST-роуты: редирект через _cand_back() сохраняет группировку и фильтры
(reject → ?status=rejected&group_by=...; approve → ?status=published&...)
- _fetch_candidates: в WHERE всегда is_own=0 AND status='new' → свои посты
канала @dedinit (is_own=1, backfill) и published/rejected больше не
показываются как кандидаты
- counts табов: считаются по внешним постам (не по жёсткому where), чтобы
табы статусов показывали реальные счётчики
- change: candidates-only-external-new (skip_specs)
- _fetch_candidates: статус группы = доминирующий (new>rejected>published),
а не первого поста → при group_by=date группа «Ранее на этой неделе»
больше не выглядит опубликованной (openchange fix-date-group-status)
- base.html: padding-top 1.5rem→4.5rem — заголовок не перекрывается fixed-top меню
- published.html: ID поста на карточках (#N · направление)
- AGENT.MD: бэкапы автоматические по крону, вручную не запускать