kpa39l
60617de0cb
candidates: фикс смены группировки (422 при сабмите bulk-формы)
...
- Группировка вынесена из onchange-сабмита bulk-формы в GET-ссылки
(/candidates?group_by=...&filters...&selected=...)
- Чекбоксы bulk привязаны к форме атрибутом form='bulk-form' (без JS,
HTML5) — устранены вложенные формы (невалидный HTML)
- Выбор поста — ссылкой GET (selected=id) вместо POST /candidates/select
- app.py: добавлен filters_qs (query-string фильтров для ссылок),
импорт urllib.parse.quote; /candidates/select оставлен для обратной
совместимости (сабмит старых форм)
- Тест: смена группировки, bulk reject, выбор поста, фильтры — зелёные
2026-09-13 20:57:48 +00:00
kpa39l
fc6d725bd1
candidates-mail-ui: двухпанельный интерфейс кандидатов (почтовый клиент)
...
- БД: posts.comment TEXT, posts.rewritten_text TEXT (ALTER TABLE, миграция применена)
- GET /candidates: двухпанельный рендер — слева список с группировкой
(source/date/status, свертываемые <details>) + чекбоксы bulk,
справа детали поста (действия, комментарий, пересказ, оригинал с медиа)
- Роуты: POST /candidates/select, /candidates/bulk (approve/reject/reject-old),
/posts/{id}/comment, /posts/{id}/reclassify (qwen), /posts/{id}/rewrite (qwen)
- approve вынесен в impl_approve (переиспользуется bulk-approve: publisher + бандл)
- без JS (только формы); HTML: Jinja2 + Bootstrap 5.3
- Протестировано TestClient: группировка, bulk-reject, comment, reclassify
(реальный qwen), rewrite (реальный qwen), поиск, media, published — зелёные
- openspec: change candidates-mail-ui архивирован (2026-09-13-candidates-mail-ui),
spec влита в openspec/specs/candidates-mail-ui; validate — чисто
- docs: STATUS.md, WALKTHROUGH.md обновлены
2026-09-13 20:53:53 +00:00
kpa39l
bf176cc02b
fediverse: публикация в GoToSocial (@vesti@dedinit.ru) из publisher-service
...
- gotosocial.py: клиент GtS (httpx): post_status (markdown), upload_media v2, verify_credentials, delete_status
- config.py: gt_social_url/token/visibility/format/channels
- channels.py: fediverse-каналы (VESTI_GTS_CHANNELS, префикс gt:), gt: уходит только в fediverse
- main.py: _publish_gotosocial + healthz-блок gotosocial + dry_run; status_id (ULID) в ответе
- .env.example: GT_SOCIAL_* и VESTI_GTS_CHANNELS
- STATUS.md/WALKTHROUGH.md: fediverse-раздел, хронология
- openspec: change gotosocial-publisher (proposal/design/tasks/specs), validate чисто
2026-09-13 20:19:52 +00:00