Continues an existing DWR cycle with new context (logs, errors, additional fixes). Use when the user wants to continue working on a previously started task, provides error output or logs from running the code, or wants to apply additional fixes after a completed DWR cycle. Triggered by "/dwr-next" or phrases like "продолжи задачу", "вот ошибки", "дополнительные правки".
Запускает продолжение ранее выполненного DWR-цикла. Читает контекст предыдущей сессии из task/, принимает новый контекст (логи, ошибки, дополнительные требования) и прогоняет их через task-decomposer → task-worker → work-reviewer.
Каждый шаг выполняется в отдельном агенте (отдельном контексте) — так же, как в основном DWR.
Оркестратор выполняет только следующие действия:
session.md и артефакты (impl_*.md, review_r*.md) для загрузки контекста предыдущего цикла.session.md (только Status, Round, краткие секции)..php, .js, .json, .css и т.д.)Если новый контекст (логи, ошибки) неполный или что-то неясно — передать декомпозеру как есть, без предварительного сбора контекста. Декомпозер сам анализирует кодовую базу и при необходимости задаёт уточняющий вопрос.
/dwr и хочет продолжить с новыми даннымиПользователь передаёт только новый контекст:
| Поле | Описание | Обязательно |
|---|---|---|
new_context | Логи, ошибки, трассировки, новые требования | Да (хотя бы одно) |
session_id | Номер сессии вида NNN или NNN_datetime (если нужна не последняя) | Нет (по умолчанию — последняя) |
previous_task и affected_files не нужно вводить вручную — они читаются автоматически из session.md.
Выполнять строго по шагам.
session_id → использовать task/{session_id}/task/, найти директории вида NNN_*, взять с наибольшим номеромtask/{session_id}/session.md и извлечь:
Task → это previous_taskAffected Files → список файлов из предыдущего циклаStatus → определить режим загрузки (см. ниже)Round → последний раунд предыдущего цикла*_next* в директории сессии → M = количество + 1task/{session_id}/ с суффиксом _next{M}.Если Status = escalated:
review_r{N}.md в директории сессии.### Blocker Report — это будет обязательным контекстом для декомпозера.Сбор Discoveries из предыдущего цикла:
impl_r*.md в директории сессии.## Discoveries (если есть).previous_discoveries для передачи декомпозеру.session.md не найден или task/ пуста — попросить пользователя описать предыдущую задачу вручную..cursor/agents/task-decomposer.md.Задача: Декомпозируй новый контекст в список задач на исправление.
Исходная задача (из предыдущего DWR):
[previous_task из session.md]
Новый контекст (логи / ошибки / дополнительные требования):
[new_context от пользователя]
Затронутые файлы (из предыдущего цикла): [Affected Files из session.md]
Директория сессии: task/{session_id}/
Раунд: 0 (next{M})
Запиши результат в: task/{session_id}/decomp_next{M}_r0.md
(не пиши в session.md — оркестратор перенесёт данные сам)
[Если escalated:]
BLOCKER REPORT из предыдущего цикла (обязательно учесть при декомпозиции):
[содержимое Blocker Report из review_r{N}.md]
[Если есть previous_discoveries:]
Discoveries из предыдущего цикла:
[список previous_discoveries]
decomp_next{M}_r0.md со списком задач на исправление.После получения результата оркестратор:
decomp_next{M}_r0.mdsession.md секцию ## Next {M}: Decomposition (3-5 строк: кол-во задач, порядок, ключевые файлы)Status → in_progressЕсли новый контекст содержит и ошибки, и новые требования — декомпозитор разделяет их на отдельные задачи.
Оркестратор выполняет волны последовательно, внутри каждой волны — воркеры параллельно.
2а. Параллельный запуск воркеров
Подзадача: [название и описание из decomposer]
Критерий готовности: [скопировать из вывода decomposer]
Релевантные файлы/модули: [список из decomposer или Affected Files]
Контекст: это исправление по логам/ошибкам задачи «[previous_task]»
Директория сессии: task/{session_id}/
Раунд: 0, Волна: {W}, Подзадача: {K} (next{M})
Записывай результат в: task/{session_id}/impl_next{M}_w{W}_t{K}.md
(не пиши напрямую в session.md)
Discoveries из предыдущих волн (если есть): [список]
2б. Wave Gate (обработка результатов волны)
После завершения всех воркеров волны оркестратор читает impl_next{M}_w{W}_*.md:
Задача: Уточни декомпозицию заблокированных подзадач.
Заблокированные подзадачи: [список с причинами]
Директория сессии: task/{session_id}/
Запиши в: task/{session_id}/decomp_next{M}_reblock.md
session.md секцию ## Next {M}: Implementation Wave {W} + обновить ## Affected Files.2в. Следующая волна
Запустить только после Wave Gate предыдущей. Передавать собранные Discoveries.
.cursor/agents/work-reviewer.md.Проверь результат выполнения задачи: [название задачи / краткое описание]
Исходная задача: [previous_task из session.md]
Изменения: [@файлы или дифф / описание]
Контекст исправления: [new_context — логи/ошибки, которые были переданы]
Директория сессии: task/{session_id}/
Раунд: 0 (next{M})
Последний раунд: да/нет ← «да» если это раунд 3 fix loop
Записывай результат в: task/{session_id}/review_next{M}_r0.md
(не пиши напрямую в session.md)
review_next{M}_r0.md. Код в этом шаге не править.После получения результата оркестратор:
review_next{M}_r0.mdsession.md секцию ## Next {M}: Review (вердикт + одна строка итога)Round → инкрементироватьStatus → escalatedЕсли ревьюер указал критичные или важные замечания и раунд < 3:
Шаг 3а: Запуск «task-decomposer» — декомпозиция замечаний ревью
Задача: Декомпозируй замечания ревью в список задач на исправление.
Отчёт ревью:
[полный вывод work-reviewer — критичные и важные замечания]
Контекст: задача «[previous_task]», исправлялось по: [new_context краткое]
Затронутые файлы: [Affected Files из session.md]
Директория сессии: task/{session_id}/
Раунд: {N+1} (next{M})
Discoveries из предыдущих волн (если есть): [список]
Запиши результат в: task/{session_id}/decomp_next{M}_r{N+1}.md
Оркестратор:
Round → инкрементироватьStatus → fix_loop## Next {M}: Decomposition Round {N+1} в session.mdШаг 3б: Запуск «task-worker» — исправление по волнам
Аналогично шагу 2 (включая Wave Gate). Файлы: impl_next{M}_r{N+1}_w{W}_t{K}.md.
После шага 3б — снова шаг 3. Максимум 3 раунда.
review_next{M}_r{N}.mdStatus → escalatedStatus → awaiting_nextStatus → completedsession.mdtask/{session_id}/.[/dwr-next: new_context]
↓
[0. Найти task/{NNN}_{datetime}/, читать session.md]
→ если escalated: извлечь Blocker Report из review_r{N}.md
→ собрать Discoveries из impl_r*.md
↓
[1. task-decomposer + Blocker Report (если есть) + Discoveries] → decomp_next{M}_r0.md
↓
[2. task-worker × N (параллельно)] → impl_next{M}_w{W}_t{K}.md
↓ Wave Gate (BLOCKED / NOT MET / Discoveries / merge→session.md)
[2. следующие волны...]
↓
[3. work-reviewer + Исходная задача + Последний раунд] → review_next{M}_r0.md
↓
Критичные/важные? → нет: Status=completed/awaiting_next → ЗАВЕРШЕНО
↓ да (раунд < 3)
[3а. task-decomposer + Discoveries] → decomp_next{M}_r{N+1}.md
↓
[3б. task-worker × N (параллельно)] + Wave Gate
↓
[3. work-reviewer, Последний раунд=да если N==3] → review_next{M}_r{N+1}.md
↓ (повторять 3а → 3б → 3, макс. 3 раунда)
↓ раунд==3 с критичными → Status=escalated
previous_task берётся из session.md автоматически.Status = escalated — Blocker Report обязательно передаётся декомпозеру.impl_r*.md предыдущего цикла передаются декомпозеру шага 1._next{M}. Не пишут в session.md напрямую.session.md обновляет только оркестратор — читает артефакты и переносит краткие секции..cursor/agents/task-decomposer.md, task-worker.md, work-reviewer.md.