ROBOLANCE · MVP · ВСТРЕЧА КОМАНДЫ
◆ Рабочая встреча · архитектура и задачи MVP

Robolance MVP.
Архитектура, контракты, ответственность.

Итерации 1–7 · 14 недель · 8 разработчиков · OpenRouter-first. Цель встречи — выйти с детализированным пониманием архитектуры, замороженными контрактами и закреплёнными зонами ответственности.

Сквозной путь идея → URLOpenRouter без своих GPUGo + PythonNATS + gRPC
📄 Полный рабочий документ (контракты + бэклог)
Расшифровка понятий · 1/2

Словарь: продукт и процесс

Как читать «Многоагентный DAG + Discovery → SDD»: несколько агентов-ролей выполняют граф задач (DAG); перед этим Discovery (интервью) превращает идею в спецификацию SDD. Стрелка = «преобразуется в».
MVPминимальный продукт, чтобы проверить гипотезу и взять первых клиентов
Discoveryэтап-интервью: система выясняет, что нужно заказчику (идея → требования)
SDDSpec-Driven Development — спецификация (цель, модель, фичи, критерии), из неё строятся задачи
DAGграф шагов с зависимостями без циклов (Coder→Tester→Reviewer→Docs)
агентпрограмма на LLM: рассуждает, вызывает инструменты, пишет код
ролиCoder · Tester · Reviewer · Security · Docs
reasoning-loopпетля: модель → инструмент → результат → модель, пока шаг не готов
Корпус Знанийбаза прошлых решений, из которой берём похожее
reuseпереиспользование похожих решений → экономия времени и токенов
Outcome Checkпроверка, что результат достиг цели → артефакты в Корпус
Quality gatesобязательные проверки (eval, security, тесты) как узлы конвейера
evalавтоматическая оценка качества результата
LLM-as-judgeдругая модель оценивает ответ как «судья»
OWASP top-1010 самых частых веб-уязвимостей — ориентир для security
Mockartyнаш сервис мок- и контрактного тестирования API
Evidence Bundleпакет доказательств: SDD + код + тесты + отчёты
R0–R5уровни автономии агента: от «предлагает» до «делает сам»
RACIкто за что отвечает; у нас — владелец + бэкап на компонент
Расшифровка понятий · 2/2

Словарь: технологии и инфраструктура

LLMбольшая языковая модель (Qwen, Claude…)
OpenRouterоблачный шлюз к 200+ LLM; в MVP — единственный бэкенд
токеныединицы текста для LLM; по ним считается стоимость
model-routerнаш сервис выбора модели, лимитов, ретраев, учёта стоимости
tool-brokerшлюз вызова инструментов (fs, shell, http, Mockarty) с правами
toolsдействия агента: файлы (fs), команды (shell), http-запросы
gRPCбыстрый типизированный синхронный протокол между сервисами
RESTобычный HTTP-API наружу (для UI)
SSEпоток событий сервер→браузер (живой прогресс)
NATS / JetStreamшина сообщений: work-queue (очередь) + pub-sub (события)
work-queue (pull)воркеры сами забирают задачи из очереди
идемпотентностьповтор сообщения не создаёт дубль результата
Postgresосновная БД — источник истины
Redisбыстрый кэш и счётчики (бюджеты, лимиты)
MinIOS3-совместимое хранилище артефактов и Evidence
Qdrantвекторная БД для поиска «похожего по смыслу»
embeddingsчисловые векторы текста/кода для семантического поиска
sandboxизолированная среда исполнения агента; в MVP — Docker
egress-allowlistбелый список разрешённых исходящих адресов
gVisorусиленная изоляция syscalls (отложено в ит. 10)
trace_idсквозной идентификатор для трассировки пути и стоимости
greenfield / brownfieldсоздание с нуля / доработка существующего репо
repo-mapкарта репозитория (файлы + сигнатуры) без чтения всего кода
diff / PRпатч изменений / Pull Request — форма выдачи доработки
k3sлёгкий Kubernetes для оркестрации сервисов
CI/CDавто сборка → тесты → деплой
cert-managerавто-выдача SSL (Let's Encrypt) для доменов
vLLMдвижок инференса на своих GPU (после MVP)
warm-poolпрогретые воркеры для быстрого старта (после MVP)
agent-supervisorдемон управления воркерами на GPU-ноде (ит. 8)
fine-tuningдообучение своей модели (после MVP, ит. 9)
Повестка · ~2 часа

О чём договариваемся сегодня

БлокМинЧто решаемРезультат
1. Контекст и цель MVP10Согласовать границы и «definition of MVP»Общее «да» по scope
2. Архитектура MVP30Карта компонентов + сквозной потокПонимание границ
3. Контракты и протоколы20Утвердить контракты данных и интерфейсыЗаморозка v0
4. Открытые вопросы25Принять 12 архитектурных решенийПротокол решений
5. Зоны ответственности20Закрепить владельцев компонентовRACI с именами
6. Роадмап и спринт 115Подтвердить бэклог итерации 1Спринт-1 в трекере
Границы

Что входит в MVP — и что осознанно отложено

✅ Входит (итерации 1–7)

  • Сквозной путь: идея → Discovery → SDD → многоагентная разработка → quality → деплой на домен + SSL
  • Два режима задач: greenfield (с нуля) и brownfield (доработка существующего репо → diff/PR)
  • Инференс — только OpenRouter (через model-router)
  • Песочница — Docker (netns, overlay, egress-allowlist)
  • Корпус Знаний — Qdrant + reuse в петле
  • Quality — eval, security (OWASP), Evidence, Mockarty
  • Cost-tracking и бюджет токенов — с недели 1

⏸ Отложено (после MVP)

  • Свои GPU, vLLM, supervisor, warm-pool → ит. 8
  • Fleet Control, fine-tuning, Model Registry → ит. 9
  • gVisor, Vault, R0–R5, HA, Black Box → ит. 10
  • Kafka, графовая БД, Rust → после H2
  • Мультитенантность namespace-per-tenant → hardening
Definition of MVP: к неделе 14 заказчик вводит идею → получает по ссылке работающий продукт с SSL и Evidence Bundle; система логирует себестоимость и экономию от reuse; 20 сквозных задач отработаны.
Команда · 8 человек

Кто за что отвечает

КодРольЗонаОсн. компоненты
GO1Backend Goedge, hot-pathapi-gateway, tool-broker, ci/deploy/ssl
GO2Backend Goоркестрация, контрактыtask-planner, dag-engine, dispatcher, corpus
PY1ML / Pythonагенты, reasoningagent-worker, discovery, review, embeddings
PY2ML / Pythonпромпты, SDDпромпты ролей, sdd-builder, test-agent
FEFrontendUI, SSEweb-ui: задачи, DAG, Discovery, дашборды
DODevOpsинфра, деплойk3s, БД, NATS, MinIO, Qdrant, observability
QAQA / Securityкачествоeval-runner, security-agent, E2E, датасеты
FSFull-stackинтеграцииmodel-router, cost-tracking, evidence, mockarty
Принцип: у каждого компонента один владелец и бэкап. «Общих» компонентов без владельца не бывает. Полная RACI с именами — заполняем на встрече.
Архитектура MVP

Карта компонентов (сужение 9 доменов до MVP)

Браузер ─REST/SSE─► api-gateway (Go) ─gRPC─► ORCHESTRATION (Go) task-planner · dag-engine · dispatcher · session-manager │ NATS work-queue: tasks.ready.<role> │ NATS pub-sub: tasks.events ──► SSE в UI ▼ agent-worker (Python, пул Docker-контейнеров, queue group) ├─ LLM ─HTTP(OpenAI)─► model-router (Go) ─HTTPS─► OpenRouter └─ tools ─gRPC─► tool-broker (Go) ─► fs / shell / http / mockarty (в Docker-sandbox) INTENT (Py): discovery-api · sdd-builder QUALITY (Py/Go): test · review · security · eval · evidence · mockarty KNOWLEDGE (и6): embedding-pipeline · corpus-api · reuse-engine → Qdrant DELIVERY (и7): ci-orchestrator · deployer · domain-ssl-mgr · crm-connector ДАННЫЕ: Postgres (истина) · Redis (кэш/бюджеты) · MinIO (артефакты) · Qdrant (вектор, и6)
Ключевое упрощение MVP: нет agent-supervisor. Воркеры — пул Docker-контейнеров на NATS work-queue (pull). Supervisor + warm-pool добавим в ит. 8 без смены контракта воркера.
Сквозной поток

Путь одной задачи идея → URL

1. web-ui: «Хочу интернет-магазин украшений» 2. gateway → discovery-api: интервью (5–10 вопросов) через model-router→OpenRouter 3. sdd-builder: ответы → SDD (JSON) 4. reuse-engine (и6): похожие SDD из Qdrant → в контекст 5. gateway → task-planner: CreateTask(SDD); dag-engine строит DAG [Coder → Test → Mockarty → Security → Reviewer → Docs → Deliver] 6. dispatcher → NATS tasks.ready.<role> → agent-worker забирает узел 7. worker reasoning-loop: промпт(+reuse) → model-router → tool_call → tool-broker → повтор 8. worker → tasks.events → gateway → SSE → живой прогресс в UI 9. узел done → артефакты в session-manager(MinIO) → разблокировка следующего 10. quality: eval-runner · security · Mockarty → отчёты → evidence-bundle 11. delivery: ci → deployer(K8s ns) → domain-ssl → https://task-<id>.dev.df.ru 12. Outcome OK → embedding-pipeline → Корпус Знаний (Qdrant)
Сквозной trace_id проходит gateway → orchestrator → worker → tool-broker → model-router и попадает в Loki/Grafana — полная трассируемость пути и стоимости.
Доработки · brownfield

Работа с существующим кодом

Greenfield создаёт продукт с нуля. Для доработки нужен отдельный путь: получить исходники, понять их, внести минимальный безопасный diff и вернуть Pull Request — а не переписать всё.

// поток brownfield (task.mode=brownfield) 1. repo: {git_url, ref} → repo-ingest: git clone @ref 2. строит repo-map (дерево + сигнатуры) 3. code-index (и6): эмбеддинги репо → Qdrant 4. worker: repo-map + релевантные чанки (НЕ весь репо) → правит файлы → unified diff 5. Tester: прогон существующих тестов + новых 6. Reviewer/Security: ревью именно diff'а 7. delivery: ветка + Pull Request в репо заказчика

Контекст — выборка, а не весь репо

repo-map + поиск по code-index дают только нужные файлы → экономия токенов на больших проектах.

Выход — diff/PR

Приёмка по diff и по «зелёным» существующим тестам. Минимум регрессий.

Этапность

Минимум (clone→правка→diff) — уже с ит.2. Поиск по code-index и reuse — ит.6.

Открытый вопрос (для встречи): откуда берём исходники для тестовых доработок — гибрид: запиненные фикстуры для eval-эталона + цепочка «новая→доработка» для демо. Выход — PR через Forge API (GitHub/GitLab).
Контракты · замораживаем v0

Интерфейсы — главный артефакт встречи

// REST gateway POST /api/v1/tasks {sdd_id|raw, budget} → 202 {task_id} GET /api/v1/tasks/:id → {status,dag,result_url,cost} GET /api/v1/tasks/:id/stream → text/event-stream // tool-broker (gRPC) rpc Execute(ToolCallRequest) → ToolResult name: fs.write|fs.read|shell.run|http.get|mockarty.run
// NATS subjects tasks.ready.<role> work-queue (dispatcher→worker) tasks.events pub-sub: task.created, node.started, node.step, node.done, task.done // model-router — OpenAI-совместимый POST /v1/chat/completions + X-Trace-Id,X-Role → выбор модели, retry/fallback, бюджет, cost-лог
Контракты раньше кода. Замораживаем proto/ (task, tool) + схемы событий + SDD в первые дни — это разблокирует параллельную работу всех 8 без взаимных блокировок. Владелец контрактов — GO2.
Роадмап · 7 итераций × 2 недели

Breadth-first: в конце каждой — работающая система

и1и2и3и4и5и6и7
Platform / infra
gateway · БД · NATS · MinIO · CI
Agents + tools
worker · tool-broker · sandbox
Orchestration
DAG · dispatcher · session
Discovery → SDD
discovery · sdd-builder
Quality gates
eval · security · Mockarty · evidence
Knowledge
Qdrant · reuse
Delivery
CI/CD · домен · SSL
и1–и2

Агент с инструментами, песочница, потоковый UI

и3–и4

Многоагентный DAG + Discovery → SDD

и5–и6

Quality gates + Корпус Знаний (reuse)

и7

Delivery: продукт по ссылке с SSL

Бэклог · конкретика

Демо-результат каждой итерации

Ит.Кодовое имяЧто работает в конце (демо)
1BreadcrumbUI → задача → агент (1 вызов OpenRouter) → результат; cost залогирован
2ToolbeltАгент создаёт проект (FS+Shell) в Docker-песочнице; потоковый UI; $/задача
3Divide&ConquerDAG: Coder→Tester→Reviewer→Docs; контекст между агентами; граф на фронте
4DiscoveryБизнес-идея → интервью → SDD → «Запустить» → авторазработка
5Quality Loopeval + security(OWASP) + Mockarty в DAG; Evidence Bundle; R1
6KnowledgeНовая задача переиспользует прошлые; экономия токенов в деньгах
7DeliveryИдея → … → деплой → https://… с SSL; уведомление заказчику
Полный бэклог с ID задач, владельцами, оценками, зависимостями и критериями приёмки — в рабочем документе (раздел 9). Каждая итерация = ~40 человеко-дней (8×10 раб. дней / 2 недели).
Решаем на встрече

12 архитектурных развилок

ВопросВариантыРекомендация
Репозиториймоно / много-репоМонорепо + кодоген proto
Исполнение воркеровNATS pull / supervisor pushNATS work-queue, supervisor → ит.8
model-routerпрокси / либаOpenAI-прокси (смена base_url на ит.8)
АртефактыMinIO / PG / FSMinIO с ит.1
Эмбеддингилокально CPU / OpenRouterЛокально (дешевле, без egress)
DAGYAML / хардкодYAML-шаблон по размеру SDD
Стриминг UISSE / WebSocketSSE
Песочница MVPDocker / gVisorDocker, gVisor → ит.10 (риск зафикс.)
Auth MVPтокен / KeycloakПростой токен, Keycloak → hardening
Полный список (12) с обоснованиями — раздел 11 документа. По каждому фиксируем решение в протокол встречи.
Риски MVP

Что может пойти не так и как страхуемся

🌐 OpenRouter недоступен/ограничен

Запасной провайдер (Together AI / DeepInfra), fallback в model-router. Не складываем яйца в одну корзину.

💸 Стоимость токенов выше ожидаемой

Cost-tracking с недели 1, бюджет на задачу, ускоряем переход на свои GPU (ит.8) при превышении порога.

🔧 Нестабильные tool-calls моделей

Native tool-calling + грамматики/валидация JSON, property-based тесты (50+ сценариев, ит.2).

📋 Расползание контрактов

Один владелец контрактов (GO2), заморозка v0, кодоген в CI, ломающие изменения — через версию.

🔀 Гонки/повторы в DAG

Идемпотентность по task_id+node_id, ack в JetStream, at-least-once с проверкой в Postgres.

👤 Узкое место на одном человеке

Бэкапы в RACI, не более 1 критичного компонента на человека в спринт.

День 0 · после встречи

С чего стартуем завтра

Разблокирует всех — делаем первым

  • Монорепо + права + ветка-протекшн + CI-скелет (DO)
  • Контракты v0: proto/task, proto/tool, события, SDD (GO2)
  • Dev-инфра: Postgres, Redis, NATS, MinIO (DO)
  • OpenRouter ключ + лимиты + алерты бюджета (FS)

Организационное

  • Заполнить RACI именами
  • Записать протокол 12 решений
  • Завести спринт 1 (задачи I1-*) в трекере
  • Назначить демо-ответственных за конец каждой итерации
📄 Рабочий документ MVP (контракты + бэклог) ⚙️ Целевая тех-архитектура 🗺️ План разработки
навигация · ESC оглавление · F полный экран

Оглавление