--- description: Conventional commits на русском — обязательно для semantic-release globs: "**/*" alwaysApply: true --- # Commit messages (русский) Формат: `тип(scope): описание на русском` semantic-release на push в `main` создаёт тег и публикует Docker **только** если среди коммитов с прошлого тега есть `feat` / `fix` / `perf` / `ci` / `refactor` (или BREAKING). Сообщения вроде `Init Commit`, `Update CDN Manager: …`, `Enhance …` **не парсятся** → CD пишет `No releasable commits — skipping image publish`. ## Типы - `feat` — только новая UX-фича для пользователя - `fix` — исправление бага / регрессии / вёрстки - `chore` / `docs` / `build` — конфиг, правила, документация (**без** релиза) - `ci` — CI/CD, hooks (patch-релиз) - `refactor` — рефакторинг без смены UX (patch) - `test` / `style` / `perf` — как обычно ## Правила - Префикс `type` и `scope` — **английский**; текст после `:` — **только русский** (кириллица) - Subject в **императиве**, без точки в конце - Scope — **один** идентификатор **без запятых**: `web`, `api`, `ci`, `docker`, `fleet` - Локальный hook `.husky/commit-msg` гоняет `commitlint` ## Примеры ``` feat(fleet): добавить CRUD нод и алиасов fix(web): выровнять AttentionQueue на дашборде ci(hooks): добавить commit-msg для Conventional Commits chore(docs): описать Traefik deploy ``` ## Запрещено ``` Init Commit Update CDN Manager: Add … Enhance CDN Manager: … Refactor: Remove … feat: add nodes ```