# Git-safety Checklist для контроллера субагентов

Per Pravila §15.1 — выполнять каждый раз при делегировании задачи через Task tool.

## §A. Pre-spawn чеклист (до Task-инвокации)

1. **Резолвите 4 значения** (запишите у себя для post-check):

   ```bash
   git branch --show-current        # → ожидаемая ветка
   git rev-parse HEAD               # → pre-spawn parent SHA
   git rev-parse --show-toplevel    # → worktree root
   pwd                              # → cwd
   ```

2. **Выберите модель** субагенту:
   - Задача требует `git commit`/`push`/`stage`/`checkout`/`switch`/`merge`/`rebase`? → **Sonnet или Opus**, никогда Haiku (§15.1).
   - Только read-только `git log`/`status`/`diff`/`rev-parse` ИЛИ только Edit/Read/Grep? → любая модель.
3. **Если задача правит нормативку из списка §15.2** (Pravila / CLAUDE.md / Tooling / PSR_v1 / MEMORY.md / Открытые_вопросы / docs/adr/* / db/schema.sql):

   ```bash
   git fetch origin && git log HEAD..origin/main --oneline
   ```

   Не пусто → **ребейз/merge до инвокации**, не после. Pre-flight также проверить `docs/sessions/CURRENT.md` на конфликт scope-files / version-claims.

## §B. Post-subagent чеклист (сразу после возврата субагента)

1. **`git rev-parse HEAD`** — сравнить с pre-spawn parent SHA.
   - Равно → субагент не коммитил (OK для Edit-задач без commit).
   - Отличается ровно одним коммитом, чей parent = pre-spawn HEAD → OK для commit-задач.
   - **Иначе → STOP, разбор инцидента.**
2. **`git branch --show-current`** — сравнить с pre-spawn branch.
   - Не равно → **STOP, разбор инцидента** (Sprint 6 паттерн).
3. **`git log -1 --format='%s%n%P'`** — проверить subject + parent последнего коммита.
   - Subject соответствует задаче?
   - Parent = pre-spawn HEAD?
4. Если несколько коммитов — ручная проверка subject'ов каждого.

## §C. Red-flag-список — любой = hard-stop разбор

- `branch ≠ ожидаемая`;
- `parent коммита ≠ pre-spawn HEAD` (висячий коммит / попадание на чужую ветку);
- HEAD двинулся, но субагент в отчёте об этом не упомянул;
- в diff'е есть файлы вне scope задачи.

## §D. Обязательный формат отчёта субагента

Субагент в конце ответа выписывает блок:

```
=== GIT REPORT ===
cwd: <pwd>
branch: <git branch --show-current>
HEAD: <git rev-parse HEAD>
HEAD^: <git rev-parse HEAD^>
status: <git status --short>
=== END GIT REPORT ===
```

Отсутствие блока = контроллер считает результат недостоверным и запускает §B-чеклист сам через Bash.

## §E. Соотношение с code-review

Двухстадийное review (Pravila §4.5 / PSR_v1 R10) сохраняется. Git-safety-чеклист **не заменяет** code-review — он стоит **до** него (нет смысла ревьюить diff, если он не в той ветке).
