# Задачи - [x] web/app.py: хелпер `_archive_tree(conn)` — дерево годов/месяцев GROUP BY + счётчики + «Без даты» - [x] web/app.py: роут `GET /published` — параметры year/month/page, фильтр периода, пагинация по 10 (LIMIT/OFFSET, клампинг) - [x] web/templates/published.html: правая колонка (col-lg-3 sticky) — дерево навигации, «Все посты», «Без даты» - [x] web/templates/published.html: список постов за период + Bootstrap pagination (prev/next + номера) - [x] web/templates/published.html: collapse на мобильных (кнопка «🗂 Архив») - [x] web/app.py: `_archive_q` + `tpl.globals["_published_q"]` — построение query-строки с сохранением фильтров - [x] Тест: py_compile + рендер шаблона (дерево, пагинация, active-класс) через .venv - [x] openspec validate archive-navigation — чисто (только стилевые SHALL/MUST warned, спека по-русски) - [x] Рестарт vesti-web, проверка: /published (дерево 2026, 8 постов, без дублей), ?year=2026&month=09 (4), month=08 (2), 2025 (заглушка), пагинация скрыта при 1 стр, битые /published? — 0 - [ ] Обновить STATUS.md / TODO.md