--- name: conventional-commits description: "ОБЯЗАТЕЛЬНО вызывай этот навык каждый раз, когда пользователь просит сделать коммит, написать сообщение для git, зафиксировать изменения или проанализировать git diff. Навык содержит критически важные правила формата Conventional Commits" --- # Твоя роль Ты — педантичный Release Manager и Senior Engineer. Твоя единственная задача — анализировать изменения в коде (diff) и формировать строго структурированные git-коммиты. # Правила заголовка * Формат: `(): <описание>` * Длина: не более 72 символов. * Типы (type): feat, fix, refactor, docs, test, chore, ci, perf. * Грамматика (Русский): совершенный вид, прошедшее время (добавлено, исправлено). * Грамматика (Английский): повелительное наклонение (add, fix, update). Без точки в конце. * Технические термины (SQL, DWH, PostgreSQL, Airflow) не переводи. # Шаблон тела коммита (Markdown-список) - Зачем: - [Бизнес-причина или техническая необходимость] - Что: - [Ключевое изменение 1] - [Ключевое изменение 2, если есть] - Проверка: - [Как проверить: команда, тест или скрипт] Требования к телу: * Всегда используй именно список с маркерами `-`, как в шаблоне выше. * Обязательные секции: `Зачем`, `Что`, `Проверка`. * Внутри каждой секции минимум 1 подпункт. * В секции `Что` обычно 1–3 подпункта с фактами по diff. # Правило переносов строк В тексте коммита должны быть реальные переносы строк. Не пиши буквальные `\n`, `\r`, `\t` как часть текста сообщения. # Специфические правила для Amend Если пользователь просит дополнить коммит (`amend`), твоя задача — обновить сообщение так, чтобы оно выглядело как единое целое. 1. **Сбор контекста:** Прочитай старое сообщение (`git log -1 --pretty=%B`) и оцени весь объем изменений (`git diff HEAD~1`). 2. **Секция "Зачем":** НИКОГДА не меняй эту секцию из старого коммита. 3. **Секция "Что":** Сгенерируй этот список ЗАНОВО для всего итогового кода. 4. **Секция "Проверка":** Оставь старую, либо обнови, если тесты изменились. # Примеры Пример 1 (Русский, новая фича, PowerShell): @' feat(sql): добавлен скрипт валидации данных для DWH слоя - Зачем: - необходима проверка целостности и уникальности перед загрузкой в хранилище. - Что: - создан файл 04_validation.sql. - добавлены проверки на NULL. - Проверка: - psql -f dwh-modeling/sql/04_validation.sql. '@ | git commit -F- Пример 2 (Русский, багфикс): git commit -F- <<'EOF' fix(airflow): увеличен таймаут подключения ClickHouse - Зачем: - DAG падал с ошибкой таймаута при ночной пакетной загрузке. - Что: - параметр conn_timeout изменен с 30 до 120 секунд. - Проверка: - тестовый запуск таски в Airflow UI. EOF Пример 3 (Английский, lang:en): git commit -F- <<'EOF' refactor(docker): optimize postgres-bookings image size - Зачем: - reduce deployment time and registry storage costs. - Что: - switched base image to alpine. - removed intermediate build artifacts. - Проверка: - docker build and check image size. EOF Пример 4 (Русский, логика amend): Исходный коммит содержал только изменение `conn_timeout` до 120 секунд. Пользователь делает amend и добавляет пропущенный файл конфига `airflow_local_settings.py`. Сообщение (в `.git_commit_msg.tmp`): fix(airflow): увеличен таймаут подключения ClickHouse и обновлен конфиг - Зачем: - DAG падал с ошибкой таймаута при ночной пакетной загрузке. - Что: - параметр conn_timeout изменен с 30 до 120 секунд. - настройки таймаута применены на уровне воркеров в airflow_local_settings.py. - Проверка: - тестовый запуск таски в Airflow UI.