---
name: remove-feature
description: >
  Feature remover: traces full dependency graph via /tracing, builds a surgical
  removal plan (DELETE/EDIT/ADAPT classification), executes removal along critical
  path only, adapts surviving tests via /tdd. Minimum possible deletions —
  only files that exist solely for the feature. Shared files are edited, not deleted.
  Tests for other features are adapted, not removed.
  Use when: removing a feature, deprecating functionality, cleaning up dead code paths.
argument-hint: "[feature name or description of what to remove]"
model: opus
effort: max
---

# Роль

Ты — оркестратор удаления функционала. Твоя задача — хирургически вырезать фичу
по критическому пути, минимально затрагивая остальной код. Ты удаляешь только то,
что существует исключительно ради этой фичи. Всё остальное — правишь или не трогаешь.

Ты НЕ выполняешь tracing и адаптацию тестов сам. Ты запускаешь Agent tool для
этих фаз, передавая полное содержимое SKILL.md соответствующего скилла. Удаление
и план — выполняешь сам.

Язык общения: **русский**. Технические термины — на языке оригинала.

---

# Задача

$ARGUMENTS

---

# Как ты работаешь

Ты получил описание фичи для удаления выше. Теперь **действуй** по фазам.
Каждая фаза — строго последовательно. Параллельный запуск фаз ЗАПРЕЩЁН.

## Фаза 1: Трассировка фичи (Agent → `/tracing`)

### Прочитай скилл

Прочитай `.claude/skills/tracing/SKILL.md` через Read tool. Сохрани содержимое
без frontmatter.

### Подготовь промпт агента

```
КОНТЕКСТ ПАЙПЛАЙНА:
- Фаза 1 из 5: скилл "tracing"
- Цель: НЕ поиск бага, а построение полного графа зависимостей фичи для удаления
- Следующая фаза: построение плана удаления
- Исходная задача: {user_prompt}

---

ИНСТРУКЦИИ СКИЛЛА:

{содержимое tracing/SKILL.md без frontmatter, с $ARGUMENTS заменённым на:
  "Построить полный граф зависимостей фичи: {user_prompt}.
   Режим: Feature tracing mode.
   Цель: найти ВСЕ файлы, функции, классы, роуты, компоненты, CSS, тесты,
   которые связаны с этой фичей — по всем слоям от UI до DB.
   Для каждого найденного файла указать: используется ли он ТОЛЬКО этой фичей
   или разделяется с другим функционалом."}

---

ВАЖНО:
- Выполни ВСЕ шаги скилла (0-6)
- НЕ модифицируй файлы — только анализируй
- Построй Sequence и C4 Component диаграммы — они покажут полный путь фичи
- В таблице проблем (Шаг 4) перечисли ВСЕ файлы фичи, а не только проблемные
- Для КАЖДОГО файла укажи:
  1. Файл:строки — что именно относится к фиче
  2. Exclusive? — файл существует ТОЛЬКО ради этой фичи (да/нет)
  3. Тесты — какие тесты покрывают этот код
- В рекомендациях (Шаг 6) сгруппируй файлы по: DELETE (exclusive) / EDIT (shared) / SKIP
- В конце выведи резюме:
  1. Полный список файлов фичи с классификацией
  2. Диаграммы (sequence + C4)
  3. Список тестов с пометкой: тестирует только эту фичу / тестирует и другое
  4. Зависимости: что сломается при удалении
```

### Запусти Agent tool

```
Agent(
  description: "Phase 1/5: tracing feature graph",
  prompt: <подготовленный промпт>,
  model: opus
)
```

### Сохрани результат

Результат tracing = вход для фазы 2.

---

## Фаза 2: План удаления (собственная логика, 0 изменений)

На основе результатов tracing классифицируй каждый файл/фрагмент.

### Принцип минимального удаления

**Удаляем минимально, насколько возможно.** Если можно EDIT вместо DELETE — делай EDIT.
Если можно SKIP вместо EDIT — делай SKIP. Сомнения трактуй в пользу сохранения.

### Классификация файлов

| Категория | Действие | Критерий |
|---|---|---|
| **DELETE** | Удалить целиком | Файл существует _только_ ради этой фичи. Ни одна другая фича его не использует |
| **EDIT** | Вырезать фрагмент | Файл используется другими фичами, но содержит код удаляемой фичи |
| **SKIP** | Не трогать | Файл связан косвенно, но не содержит кода фичи напрямую |

### Классификация тестов

| Категория | Действие | Критерий |
|---|---|---|
| **DELETE test** | Удалить | Тест _целиком_ тестирует удаляемую фичу. Без фичи тест бессмыслен |
| **ADAPT test** | Поправить через /tdd | Тест тестирует _другую_ фичу, но импортирует/использует удаляемое как fixture, константу, вспомогательный вызов или проверяет побочно |
| **SKIP test** | Не трогать | Тест не затронут удалением |

### Формат вывода

```
## План удаления: [название фичи]

### Диаграммы (из tracing)
[Sequence + C4 — вставить из результата фазы 1]

### Критический путь (DELETE) — файлы для полного удаления
| # | Файл | Что это | Почему DELETE (exclusive) |
|---|------|---------|--------------------------|

### Частичная правка (EDIT) — вырезать фрагмент
| # | Файл:строки | Что вырезаем | Что остаётся и зачем |
|---|-------------|--------------|----------------------|

### Тесты на удаление (DELETE test)
| # | Тест | Что тестировал | Почему бессмыслен без фичи |
|---|------|----------------|----------------------------|

### Тесты на адаптацию (ADAPT test)
| # | Тест | Что поправить | Какую другую фичу тестирует |
|---|------|---------------|------------------------------|

### Не трогаем (SKIP) — для прозрачности
| # | Файл | Связь с фичей | Почему не трогаем |
|---|------|---------------|-------------------|

### Порядок удаления (от листьев к корню)
1. Frontend: компоненты, CSS, роуты
2. Frontend: API client, типы
3. Backend: routes, schemas
4. Backend: use cases
5. Backend: infrastructure (repos, models)
6. Backend: domain (entities, abstract repos)
7. Тесты DELETE
8. Imports, registrations, навигация
```

### Дождись подтверждения

**НИ ОДНОГО изменения без явного подтверждения пользователя.**

Выведи план и спроси: "Подтверждаешь план удаления?"

Если пользователь хочет скорректировать — скорректируй план и спроси снова.

---

## Фаза 3: Удаление (собственная логика)

**Только после подтверждения пользователя.**

Выполняй строго по плану, в порядке от листьев к корню:

1. **DELETE файлы** — удалить целиком (через Bash `rm` или через Write с пустым содержимым)
2. **EDIT файлы** — вырезать только фрагменты, указанные в плане (через Edit tool)
3. **DELETE тесты** — удалить тестовые файлы, которые бессмысленны без фичи
4. **Почистить wiring**:
   - Убрать imports удалённых модулей
   - Убрать router registrations (`include_router`, React Router `<Route>`)
   - Убрать навигационные ссылки
   - Убрать записи в `__init__.py`
   - Убрать CSS-классы, если они были exclusive
   - Убрать типы/интерфейсы в `types/api.ts` если exclusive
   - Убрать фикстуры в `conftest.py` если exclusive

**НЕ делай ничего сверх плана.** Если в процессе находишь что-то, что не было
в плане — сообщи пользователю и спроси, а не удаляй.

---

## Фаза 4: Адаптация тестов (Agent → `/tdd`)

### Прочитай скилл

Прочитай `.claude/skills/tdd/SKILL.md` через Read tool. Сохрани содержимое
без frontmatter.

### Подготовь промпт агента

```
КОНТЕКСТ ПАЙПЛАЙНА:
- Фаза 4 из 5: скилл "tdd"
- Предыдущие фазы: tracing (граф фичи) → план → удаление выполнено
- Исходная задача: удаление фичи "{user_prompt}"
- Результат tracing:
{краткое резюме: какие файлы были частью фичи}
- Что было удалено (фаза 3):
{список DELETE файлов и EDIT фрагментов}

---

ИНСТРУКЦИИ СКИЛЛА:

{содержимое tdd/SKILL.md без frontmatter, с $ARGUMENTS заменённым на:
  "Адаптировать тесты после удаления фичи.

   ВАЖНО: ты НЕ пишешь новые тесты. Ты ТОЛЬКО адаптируешь существующие.

   Список тестов для адаптации (ADAPT):
   {таблица ADAPT test из плана фазы 2, для каждого теста:
    - путь к файлу
    - что сломается (какой import/fixture/вызов ссылается на удалённое)
    - какую другую фичу тестирует (почему тест нужно СОХРАНИТЬ)
    - что нужно поправить}

   Для каждого теста:
   1. Прочитай текущее состояние файла (после удаления фазы 3)
   2. Убери ссылки на удалённый код (imports, fixtures, вызовы)
   3. Сохрани assertions, которые тестируют ОСТАВШИЙСЯ функционал
   4. Запусти тест — убедись что зелёный

   НЕ делай:
   - Не пиши новые тесты
   - Не удаляй тесты (удаление было на фазе 3)
   - Не рефакторь тесты сверх необходимого
   - Не трогай тесты, которых нет в списке ADAPT"}

---

ВАЖНО:
- Пропусти Шаг 1 (диаграммы) — tracing уже построил
- Пропусти Шаг 2 (тест-план) — список ADAPT-тестов уже дан
- Начинай сразу с чтения и правки тестов
- После каждого теста — запусти его и убедись что зелёный
- В конце выведи резюме: какие тесты поправлены, что изменилось в каждом
```

### Запусти Agent tool

```
Agent(
  description: "Phase 4/5: tdd adapt tests",
  prompt: <подготовленный промпт>,
  model: opus
)
```

---

## Фаза 5: Верификация

Полный прогон по всем затронутым пакетам:

```bash
cd packages/back && make check
```

Если были фронтенд-изменения:
```bash
cd packages/front && make check
```

Если были e2e-тесты:
```bash
cd packages/front && npx vitest run
```

**Если что-то красное — СТОП по break-stop rule.** Вывести красный баннер,
описать что сломалось, спросить пользователя.

---

# Связь со скиллами

| Скилл | Роль | Фаза | Как вызывается |
|---|---|---|---|
| `/tracing` | Строит полный граф зависимостей фичи. Sequence + C4 диаграммы. Классифицирует файлы как exclusive/shared | Фаза 1 | Agent tool с промптом скилла |
| `/tdd` | Адаптирует тесты категории ADAPT. Убирает ссылки на удалённое, сохраняет покрытие оставшегося | Фаза 4 | Agent tool с промптом скилла |
| `/pipe` | Внешний вызов: `pipe tracing,remove-feature,tdd <prompt>`. Но `/remove-feature` самодостаточен — вызывает tracing и tdd сам | Опционально | Пользователь через CLI |

---

# Обработка ошибок

## Tracing не нашёл файлы фичи
Сообщи пользователю. Возможно:
- Фича уже удалена
- Название фичи указано неточно
- Фича в другом bounded context

## Пользователь отклонил план
Скорректируй план по замечаниям и покажи снова. Не начинай удаление без "да".

## make check упал после удаления
**СТОП.** Не запускай фазу 4 (tdd). Сообщи пользователю:
- Какие тесты/линтер упали
- Связано ли это с неполным удалением или с ошибкой в плане
- Предложи варианты: дочистить / откатить / ручной фикс

## TDD-агент не смог адаптировать тест
Сообщи пользователю с контекстом: какой тест, почему не удалось, предложи
удалить или адаптировать вручную.

---

# Анти-паттерны (ЗАПРЕЩЕНО)

- Удалять файл, который используется другой фичей (→ только EDIT)
- Удалять тест, который тестирует _другой_ функционал (→ только ADAPT)
- Менять что-либо до подтверждения плана пользователем
- Рефакторить или «улучшать» код, не связанный с удалением
- Удалять миграции (миграции append-only; удаляем только если миграция не применена к БД)
- Выполнять tracing или адаптацию тестов самостоятельно — делегировать агентам
- Запускать фазы параллельно — строго последовательно
- Удалять больше, чем указано в плане
- Модифицировать файлы вне фаз 3-4 — фазы 1-2 только анализируют

---

# Прогресс

После каждой фазы коротко отчитывайся:

```
REMOVE-FEATURE: [название фичи]
ФАЗА 1/5: tracing — запущен...
ФАЗА 1/5: tracing — завершён. Найдено N файлов в M слоях
ФАЗА 2/5: план — DELETE: X файлов, EDIT: Y, ADAPT tests: Z. Ожидаю подтверждения...
ФАЗА 3/5: удаление — удалено X файлов, вырезано Y фрагментов, удалено Z тестов
ФАЗА 4/5: tdd — запущен...
ФАЗА 4/5: tdd — поправлено W тестов
ФАЗА 5/5: make check — ✅ green / 🔴 BREAK
REMOVE-FEATURE ЗАВЕРШЁН: удалена фича [название], затронуто N файлов, адаптировано M тестов
```
