---
name: sdd:repo
workflow_step: 3
description: >
  Управление репами в инвентаре: добавить, обновить ветку или удалить субмодуль.
  Вызывать когда пользователь просит добавить репу, изменить ветку, или убрать
  субмодуль из проекта. Guided-флоу с двухшаговым подтверждением для remove.
---

# sdd:repo — guided управление репозиторием

## Вход

Один из трёх action-параметров:
- `ACTION=add URL=<url> DOMAIN=<domain> BRANCH=<branch>` — добавить репу
- `ACTION=update PATH=<path> BRANCH=<branch>` — изменить ветку
- `ACTION=remove PATH=<path>` — удалить субмодуль

## Поведение по action

### ACTION=add

1. Проверить, что URL начинается с `git@` (git-протокол)
2. Прочитать существующие домены из `manifest.yaml` (поле `domains:` в каждой записи) и показать их пользователю как подсказку
3. Если указанный DOMAIN не встречается ни в одной записи `manifest.yaml` — вывести предупреждение и запросить подтверждение перед продолжением
4. Вывести preview: какая запись появится в `manifest.yaml` и `.gitmodules`
5. Спросить подтверждение
6. Если ок — вызвать `make repo-add URL=<url> DOMAIN=<domain> BRANCH=<branch>`
7. После — `make check-manifest` для верификации

**Предупреждение перед вызовом:** если URL уже есть в `manifest.yaml` — показать все существующие пути и спросить, нужен ли cross-domain алиас.

### ACTION=update

1. Найти `path` в `manifest.yaml` (grep или read)
2. Показать текущую ветку и новую
3. Подтвердить
4. Вызвать `make repo-update PATH=<path> BRANCH=<branch>`
5. `make check-manifest` после

### ACTION=remove

Двухшаговое подтверждение (защита от случайного удаления):

1. Показать запись из `manifest.yaml` для указанного PATH
2. Если репа входит в несколько доменов — показать **все** пути с одним URL
3. Запросить подтверждение: пользователь должен **ввести полный PATH** (не "да"/"y")
4. Только если введённый PATH совпадает точно — вызвать `make repo-remove PATH=<path>`
5. `make check-manifest` после

**Пример запроса подтверждения:**
```
Вы собираетесь удалить субмодуль 'domain-a/beta' из manifest.yaml и .gitmodules.
Эта операция необратима. Введите полный путь ('domain-a/beta') для подтверждения:
```

## Fallback при ошибках

- **path not found**: показать доступные пути из `manifest.yaml` (первые 10)
- **manifest.yaml не существует**: предупредить, предложить сначала добавить хотя бы одну репу
- **URL без git@**: предупредить и предложить исправить
- **make завершился с ошибкой**: показать вывод и предложить `make check-manifest` для диагностики

## Вывод

После успешного выполнения:
```
OK: <action> завершён для <path>
Запустите 'make validate' для полной проверки.
```

## Post-completion hook

После успешного завершения любого action (`add`, `update`, `remove`) автоматически запусти скилл `sdd:audit` — без дополнительного запроса пользователя. При ошибке (`make` завершился с ненулевым кодом, merge-конфликт, недоступность сети, detached HEAD) `sdd:audit` NOT вызывается.
