168 lines
6.7 KiB
Markdown
168 lines
6.7 KiB
Markdown
# Dev Workflow — Процесс разработки через OpenClaw
|
||
|
||
> Адаптация методологии Superpowers под нашу архитектуру: Стрим (постановка) → Dev-агент (реализация) → Стрим (ревью)
|
||
|
||
---
|
||
|
||
## Роли
|
||
|
||
| Роль | Кто | Что делает |
|
||
|------|-----|-----------|
|
||
| **Product** | Слава | Идея, приоритеты, финальное ОК |
|
||
| **Architect** | Стрим | BRD, ТЗ по шаблону, ревью результата |
|
||
| **Implementer** | Dev-агент | Код, тесты, деплой |
|
||
| **Reviewer** | Стрим (+ опционально отдельный субагент) | Проверка соответствия ТЗ |
|
||
|
||
---
|
||
|
||
## Пайплайн
|
||
|
||
```
|
||
Слава: идея/запрос
|
||
↓
|
||
Стрим: уточняющие вопросы (1-3 штуки, не больше)
|
||
↓
|
||
Стрим: BRD (если фича крупная) или сразу ТЗ
|
||
↓
|
||
Слава: ОК / правки
|
||
↓
|
||
Стрим: заполняет DEV_TASK по шаблону
|
||
↓
|
||
Dev-агент: реализация (sessions_spawn, agentId: "dev")
|
||
↓
|
||
Стрим: ревью результата (spec compliance)
|
||
↓
|
||
[если баги] → Dev-агент: фикс → Стрим: повторное ревью
|
||
↓
|
||
Стрим: обновляет PROJECT.md, онтологию
|
||
↓
|
||
Слава: финальная проверка
|
||
```
|
||
|
||
---
|
||
|
||
## Когда что использовать
|
||
|
||
### Быстрая задача (< 30 мин Dev-работы)
|
||
- Один файл, понятная правка, нет архитектурных решений
|
||
- **Процесс:** Стрим пишет короткое ТЗ прямо в `task` параметре `sessions_spawn`
|
||
- **Шаблон не нужен** — достаточно: цель + файлы + команда проверки
|
||
- Пример: «поменять opacity слоя с 0.55 на 0.7 в app.js строка 450»
|
||
|
||
### Средняя задача (30 мин — 2 часа)
|
||
- Несколько файлов, но понятная архитектура
|
||
- **Процесс:** Стрим заполняет DEV_TASK_TEMPLATE.md, передаёт Dev-агенту
|
||
- **Ревью:** Стрим проверяет по таблице Acceptance
|
||
- Пример: новая кнопка в UI + API endpoint + деплой
|
||
|
||
### Крупная задача (> 2 часов, новая фича)
|
||
- Много файлов, архитектурные решения, несколько компонентов
|
||
- **Процесс:** BRD → ТЗ по шаблону → разбивка на Task 1..N → Dev-агент получает по одной задаче
|
||
- **Ревью:** после каждого Task (не в конце!)
|
||
- **Опционально:** отдельный субагент-ревьюер для spec compliance
|
||
- Пример: terrain layer, PWA, новый режим роутинга
|
||
|
||
---
|
||
|
||
## Формат передачи задачи Dev-агенту
|
||
|
||
### Вариант A: Файл (средние/крупные задачи)
|
||
|
||
```python
|
||
sessions_spawn(
|
||
agentId="dev",
|
||
task="Реализуй задачу по ТЗ: /home/node/.openclaw/workspace/tasks/{project}/DEV_TASK_{feature}.md. Начни с Task 1. После каждого Task — отчитайся что сделано.",
|
||
mode="run"
|
||
)
|
||
```
|
||
|
||
### Вариант B: Inline (быстрые задачи)
|
||
|
||
```python
|
||
sessions_spawn(
|
||
agentId="dev",
|
||
task="""
|
||
Проект: enduro-trails
|
||
Сервер: slin@82.22.50.71
|
||
|
||
Задача: Поменять opacity гипсометрии с 0.55 на 0.7
|
||
|
||
Файл: /home/slin/enduro-trails/prototype/static/app.js
|
||
Строка: найти `'raster-opacity': 0.55` в source `terrain-hypso`
|
||
Заменить на: `'raster-opacity': 0.7`
|
||
|
||
Деплой:
|
||
docker cp /home/slin/enduro-trails/prototype/static/app.js prototype-enduro-trails-1:/app/static/app.js
|
||
|
||
Проверка:
|
||
curl -s https://openclaw.mva154.duckdns.org/enduro/static/app.js | grep "raster-opacity"
|
||
# Должно быть 0.7
|
||
""",
|
||
mode="run"
|
||
)
|
||
```
|
||
|
||
---
|
||
|
||
## Ревью после реализации
|
||
|
||
### Что проверяет Стрим:
|
||
|
||
1. **Spec compliance** — всё ли из ТЗ реализовано? Ничего лишнего не добавлено?
|
||
2. **Деплой** — код на сервере, контейнер работает, URL отвечает?
|
||
3. **Edge cases** — что будет если [нет данных / таймаут / мобильный]?
|
||
|
||
### Когда запускать отдельного ревьюера:
|
||
|
||
- Задача > 3 Tasks
|
||
- Затрагивает > 5 файлов
|
||
- Есть сложная логика (роутинг, алгоритмы)
|
||
|
||
```python
|
||
sessions_spawn(
|
||
task="""
|
||
Ты — ревьюер. Проверь реализацию на соответствие ТЗ.
|
||
|
||
ТЗ: [путь к DEV_TASK]
|
||
Реализация: [пути к изменённым файлам]
|
||
|
||
Проверь:
|
||
1. Все задачи из ТЗ выполнены?
|
||
2. Нет лишнего кода, не описанного в ТЗ?
|
||
3. Команды проверки из ТЗ проходят?
|
||
|
||
Формат ответа:
|
||
✅ Task N — ОК / ❌ Task N — [что не так]
|
||
""",
|
||
mode="run"
|
||
)
|
||
```
|
||
|
||
---
|
||
|
||
## Принципы (из Superpowers, адаптированные)
|
||
|
||
| Superpowers | Наша адаптация |
|
||
|-------------|---------------|
|
||
| TDD обязателен | Тесты для бэкенда/логики. Для UI — acceptance checks |
|
||
| Git worktrees | Не используем. Деплой через docker cp / SSH |
|
||
| Fresh subagent per task | ✅ Уже делаем через sessions_spawn |
|
||
| No placeholders в плане | ✅ Точный код, точные пути, точные команды |
|
||
| Spec review + Code review | Spec review — всегда. Code review — для крупных задач |
|
||
| Continuous execution | Dev работает автономно внутри одного Task |
|
||
| YAGNI | Не добавлять фичи, которых нет в ТЗ |
|
||
|
||
---
|
||
|
||
## Антипаттерны
|
||
|
||
❌ **Стрим пишет код сама** — никогда, даже «быстрый фикс»
|
||
❌ **ТЗ без команды проверки** — Dev не знает когда он закончил
|
||
❌ **«Сделай как в прошлый раз»** — Dev не помнит прошлый раз, повтори контекст
|
||
❌ **Несколько крупных Tasks в одном spawn** — контекст переполнится
|
||
❌ **Ревью через неделю** — проверять сразу после выполнения
|
||
|
||
---
|
||
|
||
*Создано: 2026-05-12 | Автор: Стрим*
|