# Правила проекта

## Миграции базы данных

**ВАЖНО:** Если меняется структура базы данных — пиши НОВУЮ миграцию.
НИ В КОЕМ СЛУЧАЕ не меняй старые миграции, можно добавлять только новые.
Старой миграцией считается та, что была уже ранее закоммичена.

## Перезапуск приложения после изменений

После применения всех изменений в бэкенде (`play-life-backend/`) или фронтенде (`play-life-web/`), а также после изменений в `docker-compose.yml`, **ОБЯЗАТЕЛЬНО** выполни команду `./run.sh` для перезапуска всех сервисов.

Применяется при работе с:
- Go кодом в `play-life-backend/`
- Миграциями базы данных в `play-life-backend/migrations/`
- React компонентами и стилями в `play-life-web/src/`
- Docker конфигурациями (`docker-compose.yml`, `Dockerfile`)

При изменениях в `play-life-llm/` (если LLM запущен на этой машине) выполни `./runLLM.sh`.

**Команды:** `./run.sh` (web + backend + db) или `bash run.sh` в корне проекта. Для LLM: `./runLLM.sh`.

## Поднятие версии и пуш

Когда пользователь просит **поднять версию и запушить**:

### 1. Определи тип версии

- **major** — первая цифра (1.1.1 → 2.0.0), минор и патч обнуляются
- **minor** — вторая цифра (1.0.1 → 1.1.0), патч обнуляется
- **patch** — третья цифра (1.0.0 → 1.0.1)

Любая часть версии может быть больше 9 (10, 11, 12 и т.д.).

**Если тип версии непонятен из контекста — обязательно спроси у пользователя!**

### 2. Обнови версию в файлах

- `VERSION` (в корне проекта)
- `play-life-web/package.json` (поле `"version"`)

### 3. Составь commit message

Выполни `git diff --staged` и `git diff`, проанализируй изменения. Составь **короткий commit message** (максимум 50 символов) на русском языке. Формат: `"1.2.3: Описание изменений"`.

### 4. Закоммить и запушить

```bash
git add -A
git commit -m "<commit message>"
git push
```

## Пуш без поднятия версии

Когда пользователь просит просто запушить (без поднятия версии):

1. Выполни `git diff --staged` и `git diff`, составь короткий commit message на русском (максимум 50 символов)
2. `git add -A && git commit -m "<commit message>" && git push`

**Примеры:**
- "Подними патч и запушь" → поднять patch
- "Bump minor and push" → поднять minor
- "Подними версию и запушь" → спросить какой тип
- "Запушь изменения" → пушить без изменения версии
