openspec: архив 14 завершённых change-ов (веб-фиксы, crawler-queue, own-content-hub, publisher-service); спеки влиты в openspec/specs

This commit is contained in:
kpa39l
2026-09-16 17:01:00 +00:00
parent 584582a48c
commit 771f6a8276
88 changed files with 1632 additions and 3 deletions
@@ -0,0 +1,35 @@
# Tasks: sources-admin
## 1. sources.py — CRUD для БД + валидация
- [x] 1.1 `delete_source_db(slug)`: UPDATE posts/runs SET source_id=NULL, DELETE rss_state, DELETE sources.
Проверка: юнит-тест — после delete_source_db строки sources нет, rss_state нет, posts.source_id=NULL.
- [x] 1.2 `set_source_enabled(slug, enabled)`: обновить yaml (upsert с enabled) + sync_yaml_to_db_and_back.
Проверка: юнит — после toggle enabled в БД = 0/1, в yaml = false/true.
- [x] 1.3 `add_or_update_source(data)`: валидация (slug regex, crawler ∈ {telegram,rss}, priority ∈ P0..P3, rss→feed_url обязателен) → upsert yaml → sync.
Проверка: юнит — add 'opennet' (rss) → есть в yaml и БД; невалидный 400.
## 2. Веб-слой
- [x] 2.1 GET /sources — страница (таблица + форма). Шаблон sources.html.
Проверка: GET с auth → 200, в таблице все источники (10).
- [x] 2.2 POST /sources/add, /sources/update/<slug> — добавление/правка. Валидация, flash, редирект.
Проверка: POST add opennet → в БД/yaml появился; POST update — name изменился.
- [x] 2.3 POST /sources/{slug}/toggle — пауза (enabled 0) / снятие (enabled 1).
Проверка: toggle lwn → enabled=0 в БД и yaml; в /crawlers lwn помечен disabled.
- [x] 2.4 POST /sources/{slug}/delete — удаление с confirm. Каскад: posts/runs source_id=NULL, rss_state удалён.
Проверка: delete тестового источника → из yaml и БД исчез, посты не потеряны (source_id NULL).
- [x] 2.5 Навбар: ссылка «Источники» (была добавлена — проверена в base.html).
## 3. Интеграция, доки
- [x] 3.1 AGENT.MD / STATUS.md / TODO.md — /sources (добавлено/закрыто).
- [x] 3.2 Ссылка /sources в nav (проверка вёрстки).
- [x] 3.3 `openspec validate sources-admin` → valid.
- [x] 3.4 Рестарт vesti-web, ручная проверка GET /sources 200.
## Примечания
- sources.yaml — источник истины; каждое изменение пишется в yaml И БД.
- Удалённые посты НЕ удаляются (история), только source_id=NULL.
- Пауза не трогает уже собранные посты — только прекращает сбор (enabled=0).
- HTTP-тест: add→toggle(pause)→toggle(resume)→delete прошёл end-to-end (тест. источник test_tmp_src удалён, чисто).