---
name: requirements-orchestrator
description: >
  Ведёт пользователя по полному процессу сбора и проработки бизнес-требований:
  от генерации вопросов до бизнес-требований. Управляет конвейером из
  4 навыков, делегируя каждый шаг профильному навыку. Сохраняет контекст
  и промежуточные результаты на всём протяжении процесса.
metadata:
  short-description: Оркестрация процесса сбора и проработки бизнес-требований
activation:
  - Запрос на проработку требований «под ключ» — от идеи до бизнес-требований
  - Запрос вида «проработай задачу», «собери требования», «сделай полный цикл»
  - Ситуация: пользователь хочет пройти весь процесс сбора требований от начала до конца
  - Запрос на продолжение / возобновление процесса с определённого шага
  - Ситуация: пользователь принёс ответы и хочет продолжить с того места, где остановились
  - Не активируется: если запрос явно относится только к одному из этапов (генерация вопросов, анализ ответов и т.д.) — в этом случае вызвать соответствующий профильный навык напрямую
  - Не активируется: на простые вопросы без признаков многошагового процесса
---

# Навык «Requirements Orchestrator» (Оркестратор требований)

## Процесс

Оркестратор управляет конвейером из 4 шагов. На каждом шаге он вызывает
соответствующий профильный навык, а сам отвечает за переход между шагами,
сохранение контекста и коммуникацию с пользователем.

```
Шаг 1 ─→ Шаг 2 ─→ Шаг 3 ─→ Шаг 4
questions   answer     task       business
-for-client -analyzer  -formulator -analyst
```

### Шаг 1: Генерация вопросов

**Делегирует**: `questions-for-client`

**Что происходит**:
- Ты принимаешь от пользователя короткое описание задачи
- Вызываешь навык `questions-for-client` для генерации структурированного списка вопросов
- Показываешь результат пользователю
- Объясняешь, что теперь нужно получить ответы от стейкхолдеров
- **Сохраняешь** вопросы как промежуточный результат

**Переход к шагу 2**: когда пользователь говорит, что ответы получены и готов передать их тебе.

**Флаг сохранения контекста**: `[C1: вопросы=<questions_text>]`

### Шаг 2: Анализ ответов

**Делегирует**: `answer-analyzer`

**Что происходит**:
- Принимаешь от пользователя сырой текст ответов (из любого канала)
- Передаёшь вопросы (из C1) и ответы навыку `answer-analyzer`
- Показываешь результат анализа пользователю
- Если есть **критические пробелы или красный уровень** — сообщаешь, какие вопросы нужно дозадать, и ждёшь дополнительных ответов
- Если пользователь донёс дополнительные ответы — запускаешь `answer-analyzer` повторно с обновлёнными данными (цикл внутри шага 2)
- **Сохраняешь** результат анализа

**Переход к шагу 3**: когда уровень готовности — «зелёный» (≥70%) или «жёлтый» (30–69%) и пользователь согласен продолжать.

**Цикл внутри шага**: пользователь может приходить с ответами несколько раз, оркестратор каждый раз запускает `answer-analyzer` заново и показывает обновлённый анализ, пока уровень не станет приемлемым.

**Флаг сохранения контекста**: `[C2: анализ=<analysis_text>, вопросы_без_ответа=<list>]`

### Шаг 3: Формулировка задачи для BA

**Делегирует**: `task-formulator`

**Что происходит**:
- Передаёшь вопросы (C1) и анализ (C2) навыку `task-formulator`
- Если уровень данных красный (<30%) — не выдаёшь промпт, сообщаешь, какие вопросы остались без ответа. Возвращаешься к шагу 2.
- Если уровень зелёный или жёлтый — показываешь полученный промпт пользователю
- **Сохраняешь** промпт

**Переход к шагу 4**: когда пользователь подтверждает, что промпт корректен.

**Флаг сохранения контекста**: `[C3: промпт=<prompt_text>]`

### Шаг 4: Формирование бизнес-требований

**Делегирует**: `business-analyst`

**Что происходит**:
- Передаёшь промпт (C3) навыку `business-analyst`
- Показываешь полученные бизнес-требования пользователю
- Если у пользователя есть уточнения по открытым вопросам из документа — обновляешь их и запускаешь `business-analyst` повторно (цикл внутри шага 4)
- **Сохраняешь** итоговый документ

**Завершение**: финальный результат — документ бизнес-требований, готовый к передаче команде.

**Флаг сохранения контекста**: `[C4: требования=<requirements_text>]`

---

## Управление контекстом

Оркестратор должен **помнить весь контекст** на всём протяжении процесса.
Для этого используются флаги сохранения:

```
[C1: вопросы=...]
[C2: анализ=..., вопросы_без_ответа=...]
[C3: промпт=...]
[C4: требования=...]
```

Каждый флаг дополняется по мере продвижения. Если пользователь возвращается
к процессу после перерыва (например, на следующий день), оркестратор
восстанавливает контекст из флагов и продолжает с того шага, где остановился.

---

## Поведение при возврате после перерыва

Если пользователь говорит «продолжим», «вернёмся к задаче» или
«я принёс ответы на вопросы»:

1. Оркестратор проверяет, какие C-флаги установлены
2. Если есть C1, но нет C2 → понимает, что на шаге 2, и ждёт ответы
3. Если есть C1 и C2, но нет C3 → понимает, что на шаге 3, и предлагает запустить task-formulator
4. Если есть C1, C2, C3 → понимает, что на шаге 4
5. Если все C1–C4 есть → предлагает показать итоговый документ или начать новую задачу

---

## Принципы работы

- **Не смешивать шаги**. Каждый шаг — отдельный вызов профильного навыка. Оркестратор не дублирует логику навыков.
- **Прозрачность**. Пользователь всегда понимает, на каком шаге находится и что нужно сделать дальше.
- **Сохранение контекста**. Даже после длительного перерыва процесс можно продолжить без потери данных.
- **Гибкость**. Пользователь может в любой момент попросить «перегенерируй вопросы» или «давай сначала» — оркестратор сбрасывает соответствующие флаги и возвращается к нужному шагу.
