# Git workflow ## Ветки ```text main стабильная ветка, всегда deployable dev текущая разработка (merge из feature-веток) feat/ новый функционал fix/ исправление бага refactor/ рефакторинг без изменения поведения chore/ инфраструктура, зависимости, CI docs/ документация ``` ### Правила - `main` защищён — прямые коммиты запрещены - Все изменения через Pull Request из feature-ветки в `dev` - Merge `dev` → `main` при готовности к релизу - Feature-ветка живёт не дольше 3-5 дней ## Conventional commits Формат: `type: description` | Тип | Когда | | ----- | ------- | | `feat` | Новый функционал | | `fix` | Исправление бага | | `refactor` | Рефакторинг без изменения поведения | | `chore` | Зависимости, CI, конфигурация | | `docs` | Документация | | `test` | Добавление/изменение тестов | | `style` | Форматирование (без изменения логики) | Примеры: ```text feat: add LLM question generation endpoint fix: correct test score calculation for multiple-choice chore: update drizzle-orm to 0.35 docs: add LLM module description refactor: extract subscription middleware test: add auth service unit tests ``` ## Husky + lint-staged ```bash npm install -D husky lint-staged npx husky init ``` ```json // package.json { "lint-staged": { "*.{ts,js}": ["eslint --fix", "prettier --write"], "*.{json,md}": ["prettier --write"] } } ``` ```bash # .husky/pre-commit npx lint-staged ``` ## Commitlint ```bash npm install -D @commitlint/cli @commitlint/config-conventional ``` ```ts // commitlint.config.ts export default { extends: ['@commitlint/config-conventional'], } ``` ```bash # .husky/commit-msg npx --no -- commitlint --edit $1 ``` ## Pull Request ### Чеклист перед PR - [ ] Линтер проходит без ошибок - [ ] Тесты проходят - [ ] Нет `console.log` (только logger) - [ ] Нет `any` без обоснования - [ ] Коммиты соответствуют conventional commits ### Описание PR ```text ## Что сделано <краткое описание изменений> ## Как тестировать <шаги для проверки> ## Связанные задачи <ссылки на issues если есть> ```