# Finish Branch Skill

Завершение работы на ветке: проверка тестов, выбор действия, очистка.

## Когда использовать автоматически
- Даня говорит «заверши ветку», «finish branch», «замержь», «мержь»
- После завершения `/delegate` (все задачи выполнены)
- Даня говорит «создай PR» в контексте готовой ветки

## Когда НЕ использовать
- Работа ещё не завершена (есть незакоммиченные изменения)
- На ветке main/master — нечего завершать
- Нет git-репозитория

## Алгоритм

### 1. Проверка тестов
Запусти тестовую команду проекта. Если тесты **падают**:

```
⛔ Тесты не проходят. Нельзя завершать ветку.

Падения:
- test_name_1: описание ошибки
- test_name_2: описание ошибки

Варианты:
1. Исправить (используй /debug)
2. Посмотреть позже — оставить ветку как есть
```

**НЕ продолжать** с падающими тестами без явного разрешения Даня.

### 2. Определение базовой ветки
```bash
git merge-base HEAD main 2>/dev/null || git merge-base HEAD master 2>/dev/null
```
Если неясно — спросить у Даня.

Покажи сводку:
```
Ветка: feature/my-feature
База: main
Коммитов: N
Файлов изменено: N
```

### 3. Предложи ровно 4 варианта

```
Работа завершена. Что дальше?

1. Замержить в [base] локально
2. Запушить и создать Pull Request
3. Оставить ветку (разберусь позже)
4. Удалить эту работу
```

**Только эти 4 варианта.** Не придумывать кастомные опции.

### 4. Выполнение выбранного варианта

**Вариант 1 — Merge locally:**
- `git checkout [base]` → `git pull` → `git merge [branch]`
- Запусти тесты на merged результате
- Если конфликты — покажи Дане, помоги разрешить
- `git branch -d [branch]` после успешного мержа

**Вариант 2 — Create PR:**
- `git push -u origin [branch]`
- Создай PR через `gh pr create`:
  - Заголовок из названия фичи/ветки
  - Body: список изменений, тестовый план
- Покажи URL созданного PR

**Вариант 3 — Keep branch:**
- Ничего не делать
- Сообщить: `Ветка [branch] сохранена. Вернёшься к ней когда будешь готов.`

**Вариант 4 — Discard:**
- Запросить подтверждение: **«Напиши "удалить" для подтверждения»**
- Только после подтверждения:
  - `git checkout [base]`
  - `git branch -D [branch]`
- Сообщить что работа удалена

### 5. Очистка worktree (если применимо)
Если работа велась в worktree (через Agent с `isolation: "worktree"`):
- Варианты 1, 2, 4 — worktree удаляется автоматически
- Вариант 3 — worktree сохраняется

## Правила
- НИКОГДА не продолжать с падающими тестами
- НИКОГДА не мержить без предварительного запуска тестов
- Вариант 4 (удаление) — ТОЛЬКО с текстовым подтверждением
- После merge (вариант 1) — перезапустить тесты на merged коде
- Не force push, не amend published коммиты
- Если PR уже существует для этой ветки — сообщить и не создавать дубликат

## Запрос: $ARGUMENTS
