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 час