mirror of
https://gitverse.ru/kpa39l/vesti.git
synced 2026-09-29 09:55:03 +00:00
docs: закрытие сессии 2026-09-17 (keep-bulk-checkboxes)
This commit is contained in:
@@ -1,8 +1,14 @@
|
||||
# VESTI — Статус
|
||||
|
||||
Обновлено: 2026-09-16 (address-field-enhancement заархивирован; активны: manual-direction, extract-post-sources)
|
||||
Обновлено: 2026-09-17 (keep-bulk-checkboxes заархивирован, запушен c8fe5f7; активны: extract-post-sources)
|
||||
<!--
|
||||
История обновлений:
|
||||
2026-09-17 — keep-bulk-checkboxes: фикс чекбоксов bulk-выбора. Отметки постов сохраняются
|
||||
в sessionStorage (vesti_bulk_candidates / vesti_bulk_selected) и восстанавливаются
|
||||
при открытии поста (?selected=N); badge sel-count пересчитывается; при submit
|
||||
bulk-формы отметки очищаются. Найден баг: чекбоксы вне <form> (form="bulk-form"),
|
||||
селектор #bulk-form input[name="ids"] не находил их → заменён на input[name="ids"].
|
||||
Коммит c8fe5f7, запушен в gitverse.
|
||||
2026-09-16 — address-field-enhancement ЗААРХИВИРОВАН (openspec/changes/archive/2026-09-16-address-field-enhancement/).
|
||||
(вместо url/channel/feed_url), парсинг по типу crawler; кнопка «Найти» получает
|
||||
название канала из TG API (Telethon get_entity; RSS — feedparser title) и slug из адреса;
|
||||
@@ -26,6 +32,7 @@
|
||||
-->
|
||||
|
||||
## Текущее состояние
|
||||
- **keep-bulk-checkboxes — ЗААРХИВИРОВАН И ЗАПУШЕН** (2026-09-17, коммит c8fe5f7): проверки массового выбора постов сохраняются между перезагрузками страницы при навигации по постам. Отметки хранятся в sessionStorage браузера (`vesti_bulk_candidates` / `vesti_bulk_selected`); при открытии поста (?selected=N) восстановленные чекбоксы остаются отмеченными, badge sel-count пересчитывается; при submit bulk-формы (Отобрать/Отклонить/Обработать/Опубликовать) отметки очищаются. Изоляция /candidates и /selected независимыми ключами. Попутно исправлен скрытый баг: чекбоксы лежат вне `<form>` (атрибут form="bulk-form") → селектор `#bulk-form input[name="ids"]` не находил их; заменён на глобальный `input[name="ids"]`. Изменены только web/templates/candidates.html и selected.html (frontend, рестарт не нужен).
|
||||
- **address-field-enhancement — ЗААРХИВИРОВАН** (2026-09-16). Сделано и в проде: форма добавления источника — одно поле Address. Для telegram: `https://t.me/mknewsru` → slug=`mknewsru`, название «Мой Компьютер» (Telethon get_entity); для rss: `https://lwn.net/headlines/rss` → slug=`lwn`, название «LWN.net» (feedparser). Кнопка «🔎 Найти» в форме. direction — datalist из реальных значений (DIRECTIONS + БД), свободный ввод остаётся. БД не менялась (address — только UI-концепция, в yaml по-прежнему url/channel/feed_url).
|
||||
- **fix-sources-add-channel** (2026-09-16): добавление telegram-источника через веб снова работает. Поле `channel` добавлено в форму (required для telegram через JS) и показывается в таблице. Причина: UI-форма не имела поля channel. `web/templates/sources.html` ранее отсутствовал в git — добавлен.
|
||||
- **FEDIVERSE-ПУБЛИКАЦИЯ РАБОТАЕТ** (2026-09-13): publisher-service умеет публиковать карточки в GoToSocial (social.dedinit.ru) от имени бот-аккаунта **@vesti@dedinit.ru** (Mastodon-совместимый API). Change `gotosocial-publisher`.
|
||||
|
||||
@@ -57,9 +57,9 @@
|
||||
| 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 | Пост без классификации: на карточке значок «?» — понять его роль; если классификации нет — дать возможность вручную указывать/изменять/добавлять направление при анализе | ✅ закрыта | 2026-09-16 (change manual-direction: select направлений в «Отобранных» у «🤖 Обработать моделью»; manual_direction пишется в БД без LLM; проверено: пост 1086 → tech) |
|
||||
| 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 | Интерфейс кандидатов: разделить окно на 2 панели — слева список кандидатов, справа меню действий с постом (опубликовать / отклонить / переклассифицировать / переписать новость под себя), ниже блок для моего комментария, потом оригинальный пост со всеми медиа | ✅ закрыта | 2026-09-16 (двухпанельный mail-UI: candidates-mail-ui 13.09 + selected-list 15.09 — обработка/переклассификация/переписывание/публикация/комментарий/медиа перенесены в «Отобранные» (пайплайн кандидаты→отобранные→опубликованные); в кандидатах осталось отобрать/отклонить) |
|
||||
| 2026-09-13 | Контент-стратегия: не перепубликовать чужие новости, а публиковать переписанные от себя (персональный контент, добавление ценности). Связано с «переписать новость под себя» в интерфейсе кандидатов — нужна генерация пересказа через LLM + редактирование перед публикацией | ✅ закрыта | 2026-09-15 (change rewrite-as-author: textarea редактируема + кнопка сохранения; публикация идёт с пересказом от имени @dedinit) |
|
||||
| 2026-09-13 | Извлечение источников новостей из полученных постов (каналы/сайты, откуда пришли новости) — чтобы в следующий раз забирать новости напрямую из источника. ДОПОЛНЕНИЕ: возможно стоит разработать сервис поиска источников в интернете (если источник не указан) и ДООБОГАЩАТЬ карточки кандидатов, но — чтобы не тратить лишние деньги — ТОЛЬКО для одобренных кандидатов. Пайплайн: отбор новостей из списка кандидатов → в «выбранные» → обработка/дообогащение/переписывание при необходимости → публикация | 🔵 открыта | (зафиксирована, проработать) |
|
||||
| 2026-09-13 | OpenSpec change `gotosocial-publisher`: proposal/design/tasks/specs/gotosocial-publisher, validate чисто | ✅ закрыта | 2026-09-13 (архивирован как 2026-09-13-gotosocial-publisher, delta влита в specs/gotosocial-publisher/spec.md) |
|
||||
@@ -67,7 +67,7 @@
|
||||
| 2026-09-13 | OAuth-приложение vesti-publisher (POST /api/v1/apps, scopes write write:media) + user-токен vesti (вставка в tokens, user_id из users) | ✅ закрыта | 2026-09-13 (client_id=01B09QNDM9YQ2VQVSRXHCVAV6K; verify_credentials → username=vesti) |
|
||||
| 2026-09-13 | publisher: модуль gotosocial.py (httpx: post_status/upload_media/verify_credentials/delete_status), config gt_social_*, channels gt:, main.py _publish_gotosocial + healthz + dry_run | ✅ закрыта | 2026-09-13 (реальные тесты: текст, медиа, delete; status_id ULID; канал @vesti@dedinit.ru) |
|
||||
| 2026-09-13 | Доки + git + backup по gotosocial-publisher (STATUS/WALKTHROUGH/.env.example; коммиты bf176cc, 6b955aa на gitverse) | ✅ закрыта | 2026-09-13 (backup.sh в фоне — уведомление отдельно) |
|
||||
| 2026-09-13 | Пометить аккаунт vesti как bot (PATCH /api/v1/accounts/update_credentials bot:true или actor_type Service) | 🔵 открыта | (косметика, не критично) |
|
||||
| 2026-09-13 | Пометить аккаунт vesti как bot (PATCH /api/v1/accounts/update_credentials bot:true или actor_type Service) | ✅ закрыта | 2026-09-16 (PATCH update_credentials bot=true, verify: bot=True) |
|
||||
| 2026-09-13 | Фан-аут направлений → каналы (в т.ч. fediverse-каналы по направлениям) | 🔵 открыта | (расширение публикации) |
|
||||
| 2026-09-13 | Отдельная страница управления источниками новостей: отображение / добавление / удаление / редактирование, фильтр по типу источника (Telegram, RSS, почтовая рассылка, прямые новости с сайтов, Twitter и т.п.) | ✅ закрыта | change sources-admin; /sources + CRUD (add/edit/toggle/delete), yaml — источник истины |
|
||||
| 2026-09-14 | Метрики: добавить инсайты — сколько в день новых постов получено / одобрено / опубликовано, по аналогии с существующими карточками метрик; плюс за неделю и месяц (итого 9 карточек: день/неделя/месяц × новые/одобрено/опубликовано) | 🔵 открыта | (задача на потом, просто зафиксировать) |
|
||||
@@ -81,4 +81,5 @@
|
||||
| 2026-09-15 | Флаг прочитанности: непрочитанные карточки жирные, открытый пост — светло-голубая заливка, дефолтная группировка по дате | ✅ закрыта | change candidates-read-flag (коммит c09dff0) |
|
||||
| 2026-09-15 | «✅ Опубликовать» — НИЖЕ поля комментария рядом с «💾 Сохранить комментарий»; оригинальный пост растянут на всю высоту панели | ✅ закрыта | коммит b542e9b |
|
||||
| 2026-09-15 | **Пайплайн «Кандидаты → Отобранные → Опубликованные»**: статус selected, /selected отдельный список, в кандидатах только «⭐ Отобрать», вся обработка в отобранных, классификация по кнопке | ✅ закрыта | change selected-list (коммит ae8af8d) |
|
||||
| 2026-09-15 | Подготовка своего поста в «Отобранных»: поле «✍️ Мой пост» (rewritten_text всегда видно) рядом с оригиналом — черновик «Переписать» редактируется и публикуется | ✅ закрыта | change selected-list (коммит ae8af8d) |
|
||||
| 2026-09-15 | Подготовка своего поста в «Отобранных»: поле «✍️ Мой пост» (rewritten_text всегда видно) рядом с оригиналом — черновик «Переписать» редактируется и публикуется | ✅ закрыта | change selected-list (коммит ae8af8d) |
|
||||
| 2026-09-17 | Фикс: при открытии поста (?selected=N) чекбоксы массового выбора на /candidates и /selected сбрасывались, оставался только чекбокс открытого поста. Нужно сохранять отметки при навигации для быстрого массового отказа/отбора | ✅ закрыта | change keep-bulk-checkboxes (sessionStorage vesti_bulk_candidates/vesti_bulk_selected; коммит c8fe5f7, запушен в gitverse; баг-фикс: селектор input[name=ids] вместо #bulk-form input) |
|
||||
@@ -598,3 +598,26 @@ sudo systemctl restart vesti-web && systemctl is-active vesti-web # active
|
||||
В git status на момент ae8af8d остаются НЕЗАКОММИЧЕННЫМИ/НЕЗАПУШЕННЫМИ изменения прошлых сессий (запись «Коммит в git (НЕ закоммичено…)» выше):
|
||||
- crawler/{crawl_sources,rss_crawler,worker}.py (??), openspec/changes/{crawler-queue,rss-crawler,rewrite-as-author}/ (??), openspec/changes/archive/2026-09-15-sources-admin/, openspec/specs/sources-admin/, web/templates/{crawlers,sources}.html (??), classifier/classify.py, classifier/keywords.py, publisher/card.py, sources/{sources.py,sources.yaml}, config.py, requirements.txt, AGENT.MD, .env.example, WALKTHROUGH.md, TODO.md (M).
|
||||
- СЛЕДУЮЩЕЙ СЕССИИ: проверить, закоммитить и запушить на gitverse (git add -A, commit, push), НЕ трогая db/ (в .gitignore).
|
||||
|
||||
## 2026-09-17 — Сессия: фикс чекбоксов bulk-выбора (change keep-bulk-checkboxes)
|
||||
|
||||
### Проблема
|
||||
При массовом отборе кандидатов пользователь отмечает несколько постов чекбоксами, затем открывает один (ссылка ?selected=N) — страница перезагружается, checked ставится только текущему посту, остальные отметки теряются. Нужно, чтобы отметки сохранялись при навигации.
|
||||
|
||||
### Решение (через OpenSpec)
|
||||
- change `keep-bulk-checkboxes` (proposal/design/tasks/specs/candidates-bulk-selection), валиден с первого раза.
|
||||
- Механизм: состояние чекбоксов (Set id) хранится в sessionStorage браузера по ключам `vesti_bulk_candidates` (страница /candidates) и `vesti_bulk_selected` (страница /selected); при загрузке страницы скрипт восстанавливает checked и пересчитывает badge `sel-count`; при submit bulk-формы отметки очищаются (чтобы не «протухали»).
|
||||
- Изменены только web/templates/candidates.html и web/templates/selected.html. Сервер/БД не трогали; рестарт не нужен (Jinja2 перечитывает шаблоны; при сомнении — sudo systemctl restart vesti-web).
|
||||
|
||||
### Баг, найденный в процессе (важно!)
|
||||
- Чекбоксы лежат ВНЕ `<form id="bulk-form">` — связаны атрибутом `form="bulk-form"`. Исходный селектор `#bulk-form input[name="ids"]` возвращал 0 элементов → скрипт не цеплял чекбоксы вовсе (счётчик работал только потому, что чекбокс открытого поста сервер помечал checked атрибутом). Заменено на глобальный `document.querySelectorAll('input[name="ids"]')`.
|
||||
|
||||
### Проверка (браузерный E2E, Camofox)
|
||||
- Логин через curl (ADMIN_PASSWORD из .env) → cookie, подстановка в браузер.
|
||||
- /candidates: отметил 24 и 52 → sessionStorage `["24","52"]`, badge 3 (12 текущий + 24 + 52). Открыл пост 52 → 24 и 52 остались отмеченными, badge 2.
|
||||
- /selected: отметил 109 и 110 → sessionStorage `["109","110"]`, badge 3 (85 + 109 + 110). Открыл пост 110 → 109 и 110 отмечены, badge 2.
|
||||
- Изоляция: ключи candidates/selected независимы (cand `["24","52"]` не влияет на selected).
|
||||
|
||||
### Коммит
|
||||
- `c8fe5f7` — fix(web): keep bulk checkbox selection across post navigation. Запушен в gitverse (8777a0c..c8fe5f7).
|
||||
- В рабочем дереве остаются чужие незакоммиченные наработки (crawler/*, classifier/*, sources/* и др.) — НЕ трогал.
|
||||
|
||||
Reference in New Issue
Block a user