Agent Guide

Development Workflow

Пошаговый процесс разработки фич от ТЗ до готового кода.

Development Workflow

Обзор процесса

ТЗ → Декомпозиция → Backend Flow → Frontend Flow → Интеграция
         ↓              ↓               ↓
    Tech Lead      Sub-agents       Sub-agents

Подробнее об агентах: Sub-agents


Этап 1: Получение ТЗ

Что должно быть в ТЗ

  • Бизнес-цель — зачем нужна фича
  • User stories — что пользователь должен сделать
  • Acceptance criteria — критерии готовности
  • Сущности — какие данные задействованы
  • Ограничения — сроки, технические ограничения

Пример ТЗ

## Задача: Список заказов

### User Story
Как менеджер, я хочу видеть список заказов с фильтрацией,
чтобы быстро находить нужные заказы.

### Acceptance Criteria
- [ ] Таблица с колонками: номер, дата, статус, сумма, клиент
- [ ] Фильтр по статусу
- [ ] Фильтр по дате (от-до)
- [ ] Пагинация по 20 записей
- [ ] Сортировка по дате (desc по умолчанию)

### Сущности
- Order: id, number, status, total, createdAt
- User (клиент): id, name, email

Этап 2: Декомпозиция (Tech Lead)

Tech Lead анализирует ТЗ и определяет:

  1. Нужен ли backend? — новые API, модели, события
  2. Нужен ли frontend? — новые страницы, компоненты
  3. Порядок выполнения — backend первый, если нужен

Пример декомпозиции

## Backend (нужен)
- API: GET /api/orders с фильтрами и пагинацией
- Модель Order уже есть в Prisma

## Frontend (нужен)
- Страница: /orders
- Composable: useOrders()
- Компоненты: OrderFilters, OrderTable

## Порядок
Backend → Frontend (frontend использует API)

Этап 3: Backend Flow

backend-analyst → [backend-integrator?] → backend-developer ─┬─► backend-reviewer
                                          backend-testing ───┘

3.1 backend-analyst

Задача: Спека + проверка переиспользования

1. oro-playbook → standard-backend-api (паттерны REST)
2. oro-playbook → standard-prisma (schema conventions)
3. Проверить существующие API — можно ли расширить?
4. Составить спеку для developer

Результат: Спецификация API

## GET /api/orders

Query params:
- status?: string (фильтр по статусу)
- page?: number (default: 1)
- limit?: number (default: 20)

Response:
- data: Order[]
- meta: { page, limit, total, totalPages }

3.2 backend-integrator (если нужен)

Вызывается, если analyst определил необходимость нового инструмента.

1. WebSearch → актуальная документация инструмента
2. Проверить примеры в других модулях проекта
3. Установить и базово настроить

3.3 backend-developer + backend-testing (параллельно)

Developer:

// server/api/orders/index.get.ts
export default defineEventHandler(async (event) => {
  const query = getQuery(event)
  const page = Number(query.page) || 1
  const limit = Number(query.limit) || 20
  const status = query.status as string | undefined

  const where = { ...(status && { status }) }

  const [orders, total] = await Promise.all([
    prisma.order.findMany({
      where,
      skip: (page - 1) * limit,
      take: limit,
      orderBy: { createdAt: 'desc' },
      include: { user: { select: { id: true, name: true } } },
    }),
    prisma.order.count({ where }),
  ])

  return {
    data: orders,
    meta: { page, limit, total, totalPages: Math.ceil(total / limit) },
  }
})

Testing (параллельно):

// tests/api/orders.test.ts
describe('GET /api/orders', () => {
  it('returns paginated orders', async () => {
    const response = await $fetch('/api/orders?page=1&limit=10')
    expect(response.data).toHaveLength(10)
    expect(response.meta.page).toBe(1)
  })

  it('filters by status', async () => {
    const response = await $fetch('/api/orders?status=pending')
    expect(response.data.every(o => o.status === 'pending')).toBe(true)
  })
})

3.4 backend-reviewer

1. Code review по стандартам
2. Запуск тестов
3. Проверка типизации

Артефакты для frontend: API endpoint, типы Response


Этап 4: Frontend Flow

frontend-analyst → [frontend-integrator?] → frontend-developer ─┬─► frontend-reviewer → frontend-qa
                                            frontend-testing ───┘

4.1 frontend-analyst

Задача: Спека UI + декомпозиция компонентов

1. oro-playbook → standard-component-decomposition
2. oro-playbook → standard-component-naming
3. nuxt-ui-remote → list_components (какие компоненты использовать)
4. Составить спеку для developer

Результат: Спецификация UI

## Страница /orders

Компоненты:
- OrderFilters (USelect для статуса)
- Используем UTable для списка
- UPagination для пагинации

Composable:
- useOrders() — fetch, filters, pagination

4.2 frontend-developer + frontend-testing (параллельно)

Developer:

<!-- app/pages/orders/index.vue -->
<script setup lang="ts">
definePageMeta({ middleware: 'auth' })

const { orders, meta, loading, fetchOrders } = useOrders()

const filters = reactive({
  status: undefined as string | undefined,
  page: 1,
})

const statusOptions = [
  { label: 'Все', value: undefined },
  { label: 'Новый', value: 'pending' },
  { label: 'В работе', value: 'processing' },
  { label: 'Завершён', value: 'completed' },
]

const columns = [
  { key: 'number', label: 'Номер' },
  { key: 'createdAt', label: 'Дата' },
  { key: 'status', label: 'Статус' },
  { key: 'total', label: 'Сумма' },
  { key: 'user.name', label: 'Клиент' },
]

watch(filters, () => fetchOrders(filters), { immediate: true })
</script>

<template>
  <div class="space-y-4">
    <div class="flex gap-4">
      <USelect
        v-model="filters.status"
        :options="statusOptions"
        placeholder="Статус"
        class="w-48"
      />
    </div>

    <UTable
      :rows="orders"
      :columns="columns"
      :loading="loading"
    />

    <UPagination
      v-if="meta"
      v-model="filters.page"
      :total="meta.total"
      :page-count="meta.limit"
    />
  </div>
</template>

4.3 frontend-reviewer

1. Code review по стандартам
2. Запуск тестов
3. Проверка декомпозиции компонентов

4.4 frontend-qa

1. chrome-devtools → take_snapshot (проверка UI)
2. chrome-devtools → list_console_messages (ошибки в консоли)
3. chrome-devtools → list_network_requests (failed requests)
4. Проверка в светлой/тёмной теме
5. Проверка на мобильных

Чек-лист:

  • Нет ошибок в Console
  • Нет failed requests в Network
  • Input'ы растянуты (w-full)
  • Корректно в обеих темах
  • Корректно на мобильных

Быстрый справочник MCP

Создать страницу

1. oro-playbook   → standard-project-structure
2. nuxt-remote    → definePageMeta, useRoute
3. nuxt-ui-remote → компоненты для UI

Создать форму

1. oro-playbook   → standard-forms-validation
2. nuxt-ui-remote → UForm, UFormField, inputs
3. nuxt-remote    → если нужен submit на API

Создать API endpoint

1. oro-playbook   → standard-backend-api
2. nuxt-remote    → defineEventHandler, getQuery, readBody
3. prisma         → запросы к БД

Добавить real-time

1. oro-playbook   → standard-socket-io, ADR-013
2. WebSearch      → актуальная документация socket.io

Добавить модель в БД

1. oro-playbook   → standard-prisma
2. prisma         → schema syntax, relations
3. bash           → npx prisma migrate dev