1. Фича v2.2.20: каталог по fsnbId, applied_koef в БД/UI, e2e-сценарий

— Backend (smeta-user-backend): CatalogController/Service — все эндпоинты (/fsnb, /fsnbs, /sborniki, /razdely, /search, /resursy/search, /resursy/sections) принимают опциональный fsnbId с fallback на active. Новый /api/catalog/fsnbs.

— SmetaResurs: новая колонка applied_koef (numeric 10,4); SmetaService.applyJustificationKoefs синхронизирует значение в БД, сбрасывает в null при удалении.

— SmetaTotalService.recalcFromRabota: saveAndFlush + bubbleUp через SQL SUM (минуя lazy-loading Hibernate-коллекций).

— Юнит-тесты: PojoTest, FsnbTemplateBuilderTest, ExportServiceTest, SmetaTotalServiceUnitTest, CatalogServiceDetectTipTest.

— Frontend (smeta_user_frontend): селект ФСНБ при создании сметы в ObjectView; SmetaView показывает ФСНБ конкретной сметы; WorkPicker/NeuchtennyyPicker/RazdelGrid принимают fsnb-id; badge x{appliedKoef} в сетке.

— Удалены устаревшие представления Таблица/Компакт (SmetaTableView, SmetaMinView, RazdelMin, RazdelRows, useViewMode.js); оставлена только адаптивная Сетка.

— e2e/scenario_02_report.js (749 строк): полный воспроизводимый сценарий по 02_report_example.xls — 22 работы, 4 неучт. ресурса, 16 ВМ-подмен, 34 коэф; финальная сверка с эталоном 1 277 771,72 RUB копейка-в-копейку.

2. Релиз v2.2.21 во всех 6 репозиториях

— Bump версий: pom.xml в admin/user backend, package.json в admin/user frontend.

— SQL миграции (smeta_admin_backend): v2.2.21-schema.sql (верификация applied_koef + поля «Письмо Минстроя»), v2.2.21-data-koef.sql (демонтаж 571/п.83, 812/п.25, 774/п.16), v2.2.21-data-reports.sql (шаблон отчёта «02 ФСНБ»), README.md с порядком применения и откатом.

— RELEASING.md (smeta-user-backend, 429 строк): пошаговая 13-шаговая процедура релиза от bump до деплоя на smeta.net.ru.

— RELEASE_NOTES_2.2.21.md и RELEASE_LOG_2.2.21.md (321 строка) с хронологией сессии и 12 уроками (TEST URL ≠ admin.smeta.net.ru, API field username vs login, ручной systemctl restart и т. д.).

— DOCUMENTATION.md (382 строки): гид по mkdocs+pandoc, скриншотам Playwright, шаблону release-notes HTML.

— Унификация скриптов деплоя: deploy-smeta-user-prod.sh — парсинг smeta-frontend-* как в test.

— CatalogServiceIT: dynamic split_forma id вместо хардкода 9L.

3. Полный рерайт документации admin/user guide (15 глав вместо 9)

— smeta_admin_frontend: docs/v2/admin-guide — переписаны 15 глав без технических терминов (.vue, REST, CSS-классы, имена БД-полей). Новые главы: Главная и навигация, Технологические группы, Шаблоны отчётов, Документация. Скриншоты: 16-home.png, 17-tg.png, 18-docs.png, 19-nrsp.png, 20-characteristics.png, 21-koef-justifications.png.

— smeta_user_frontend: docs/v2/user-guide — 15 глав, новые: Главная, Создание сметы, Поправочные коэффициенты, Неучтённые ресурсы, Выбираемые материалы, Характеристики. Скриншоты: 16-characteristics, 17-neuchtennyy, 18-material-picker, 19-koef-picker.

— e2e/screenshots.js (211 строк) и e2e/admin-screenshots.js (100 строк): скрипты Playwright для KoefPicker, MaterialPicker, NeuchtennyyPicker, CharacteristicsForm, главной админки и т. д.

— Карточки релиза v2.2.21 добавлены в DocsView.vue.

4. Деплой документации на smeta.net.ru

— scripts/build-smeta-net-ru.py (205 строк): Python-сборщик single-page docs — pandoc MD → HTML body, шаблон с Manrope/sticky sidebar/IntersectionObserver.

— smeta.net.ru: пересобраны admin-guide/index.html (3071 строк) и user-guide/index.html (3123 строк), добавлены все новые скриншоты, RELEASE_NOTES_2.2.21.md скопирован в /docs/releases/, карточка v2.2.21 в timeline; v2.1.0 переведён в past.

5. Защита e2e-скриптов от случайного запуска на проде

— screenshots.js, admin-screenshots.js: проверка BASE_URL на ‘test|localhost|softlancer’; при запуске на ui.smeta.net.ru / admin.smeta.net.ru — process.exit(1).

— Backstory: первые прогоны 1 мая зарегистрировали 4 пользователя shot* на проде. Зачищены вручную SQL-командой (описана в DOCUMENTATION.md).

6. CLAUDE.md актуализация в 4 репозиториях

— TEST/PROD URLs, IP, SSH-доступ, sudoers требование, chown /var/www/smeta-admin-frontend, healthcheck нюансы.

— Документация различий API: admin → username, user → login.

— Структура docs/v2/admin-guide и dist-docs/releases.

7. n8n workflow AI News

— Per-article scene prompt: в ноде Claude:Article добавлена 3-я секция вывода — визуальное описание сцены на английском (80-150 симв). Cover-нода использует scenePrompt в YandexART вместо фиксированного «Realistic business photo». Раскатано на PROD (cron Пн-Пт 17:00 MSK).

— Single Telegram post: вместо чанков вызов /compress-article при text.length > 3800, обрезка с многоточием при > 4090. В промпте Claude ужесточение объёма до 250-350 слов / ≤ 3000 симв. Чинит баг от 2026-05-01 (пост ушёл двумя сообщениями).

Сводная статистика по коду:

Проект | Добавлено | Удалено | Коммитов

smeta_admin_backend | 480 | 10 | 3

smeta_admin_frontend | 1318 | 496 | 2

smeta-user-backend | 4111 | 250 | 5

smeta_user_frontend | 7066 | 2514 | 4

smeta-n8n-workflow | 8 | 9 | 2

smeta.net.ru | 5502 | 907 | 1

Итого | 18485 | 4186 | 17

Оценка трудозатрат:

Задача | ~Часы

Фича v2.2.20 каталога по fsnbId + applied_koef + e2e-сценарий | 16

Релиз v2.2.21 (миграции, RELEASING.md, RELEASE_LOG, деплой 6 репо) | 10

Рерайт документации admin/user guide (30 глав, скриншоты Playwright) | 14

Деплой docs на smeta.net.ru (build-smeta-net-ru.py + сборка HTML) | 4

Защита e2e-скриптов от прода + зачистка инцидента | 1

Актуализация CLAUDE.md в 4 репозиториях | 2

n8n AI News (scene prompt + single Telegram post) | 2

Итого | ~49 час