# Статус проекта: Мультиагентная разработка ПО **Дата обновления:** 2026-05-21 16:35 UTC **Ревьюер:** Стрим --- ## Общая зрелость | Фаза (из BRD) | Статус | Комментарий | |----------------|--------|-------------| | **Фаза 0: Инфраструктура** | ✅ Завершена | Всё установлено и работает | | **Фаза 1: Ручной конвейер** | ✅ Завершена | ET-001 прошёл полный цикл | | **Фаза 2: Orchestrator MVP** | ✅ Завершена (21.05) | QG реальные, автозапуск Claude CLI, 27 тестов | | **Фаза 3: Webhooks + интеграция** | ✅ Завершена (21.05) | Gitea webhooks, Plane webhooks (HMAC), review QG fix | | **Фаза 4: Полный конвейер** | ✅ Первый прогон (21.05) | ET-002 прошёл полный автоматический цикл! | | **Фаза 5: Оптимизация** | 🟡 Частично | Баги найдены, часть исправлена | --- ## 🎉 MILESTONE: Первый полный автоматический прогон (21.05.2026) **ET-002 "Чекбокс POI в попапе рельефа"** прошёл весь пайплайн автоматически: ``` analysis → architecture → development → review → testing → deploy → done ✅ ``` | Стадия | Агент | Результат | Время | |--------|-------|-----------|-------| | architecture | Architect (Claude CLI, Opus) | ADR + infra-requirements | ~5 мин | | development | Developer (Claude CLI, Sonnet) | feat commit + тесты | ~55 мин (docker build) | | review | Reviewer (Claude CLI, Opus) | APPROVED (0 P0/P1) | ~3 мин | | testing | Tester (Claude CLI, Sonnet) | PASS (pytest 14/14, JS 7/7) | ~5 мин | | deploy | Merge PR #5 → main | Merged | — | **Коммиты на ветке:** ``` c36ee9d test(ET-002): test report PASS - all tests green, ready to deploy a4a0aab docs(ET-002): code review APPROVED - no P0/P1 findings 8c17a4f feat(web): add POI visibility checkbox to terrain popup af579f7 docs(ET-002): add ADR-0001 and infra requirements for POI toggle 73c9dc4 docs(ET-002): status → approved f1f4d5f docs(ET-002): BRD, ТЗ, AC, Test Plan ``` --- ## Баги найденные при прогоне (21.05.2026) | # | Баг | Статус | Фикс | |---|-----|--------|------| | 1 | `/repos` mounted as `:ro` — агенты не могут писать | ✅ Исправлен | Убрал `:ro` из docker-compose.yml | | 2 | `check_review_approved` — "PR number not available" | ✅ Исправлен | Добавлен lookup PR по branch через Gitea API + fallback на file-based review | | 3 | `git` не установлен в контейнере orchestrator | ⚠️ Workaround | Architect использует dulwich (pip), Developer — dulwich. Коммиты от root ломают permissions | | 4 | `dismiss_stale_approvals` + duplicate CI statuses | ⚠️ Workaround | Временно отключил status check для merge, потом включил обратно | | 5 | Launcher не привязывает `task_id` к agent_runs | 🔴 Не исправлен | Все runs имеют `task_id=NULL` | | 6 | Orchestrator не автоматически продвигает stage после CI green | ⚠️ Частично | Нужен `:approved:` webhook для каждого перехода | | 7 | `.git/objects` owned by root после коммитов агентов | ⚠️ Workaround | `chown -R slin:slin` вручную перед каждым коммитом | | 8 | Developer застревает на `docker build` (~55 мин) | 🔴 Не исправлен | Для frontend-only фич docker build избыточен | --- ## Инфраструктура на mva154 (82.22.50.71) ### Контейнеры (docker ps на 21.05.2026) | Контейнер | Образ | Статус | Порт | |-----------|-------|--------|------| | `orchestrator` | orchestrator-orchestrator (self-built) | Up | 127.0.0.1:8500 | | `openclaw-gateway` | ghcr.io/openclaw/openclaw:latest | Up (healthy) | 127.0.0.1:18789 | | `enduro-trails-app-1` | enduro-trails-app (self-built) | Up (**unhealthy**) | 0.0.0.0:5558 | | `gitea` | gitea/gitea:latest | Up | 127.0.0.1:3000, 0.0.0.0:2222 | | `claude-cli-proxy` | eceasy/cli-proxy-api:latest | Up | 127.0.0.1:8317 | | `xray` | ghcr.io/xtls/xray-core:latest | Up | — | | `plane-*` (8 контейнеров) | makeplane/* | Up (healthy) | 0.0.0.0:8091, 0.0.0.0:8443 | ### Установленное ПО на хосте | Компонент | Версия | Путь | |-----------|--------|------| | Claude Code CLI | 2.1.142 | `/usr/bin/claude` (+ mount в orchestrator) | | Node.js | v24.14.0 | — | | Docker + Compose | — | — | | Nginx | — | reverse proxy | | Gitea Actions Runner | `act_runner` | `/home/slin/act_runner` (online, self-hosted) | --- ## Orchestrator — детальный статус **Репо:** `/home/slin/repos/orchestrator/` **Контейнер:** `orchestrator` (порт 8500, network_mode: host) **Конфиг:** `.env` ### Архитектура ``` src/ ├── main.py # FastAPI app ├── config.py # Settings from env ├── db.py # SQLite connection ├── stages.py # Stage machine (8 stages) ├── notifications.py # Structured logging ├── webhooks/ │ ├── plane.py # Plane webhook handler + QG orchestration │ └── gitea.py # Gitea webhook handler (push, PR, CI status) ├── qg/ │ └── checks.py # 5 QG checks (filesystem + Gitea API) └── agents/ └── launcher.py # Claude CLI launcher (subprocess.Popen) ``` ### Stage Machine ``` created → analysis → architecture → development → review → testing → deploy → done ↑ QG: files ↑ QG: ADR ↑ QG: CI green ↑ QG: PR approved ↑ QG: test report ↑ Agent: — ↑ Agent: arch ↑ Agent: dev ↑ Agent: reviewer ↑ Agent: tester ``` ### Данные в БД (на 21.05.2026) - events: 40+ - tasks: 6 (ET-001..ET-004 + smoke tests) - agent_runs: 8 (architect x4, developer x1, reviewer x1, tester x1) ### Docker-compose.yml ```yaml services: orchestrator: build: . container_name: orchestrator restart: unless-stopped network_mode: host volumes: - ./data:/app/data - /home/slin/repos:/repos # ← БЕЗ :ro (исправлено 21.05) - /var/run/docker.sock:/var/run/docker.sock - /usr/lib/node_modules/@anthropic-ai/claude-code:/opt/claude-code:ro - /usr/bin/node:/usr/bin/node:ro - /home/slin/.claude:/home/slin/.claude - /home/slin/.claude.json:/home/slin/.claude.json:ro env_file: .env environment: - ORCH_REPOS_DIR=/repos - ORCH_HOST_REPOS_DIR=/home/slin/repos group_add: - "999" ``` --- ## Analyst agent (OpenClaw) — статус | Параметр | Значение | |----------|----------| | ID | `analyst` | | Модель | `vibecode/claude-sonnet-4.6` | | Workspace | `/home/node/.openclaw/workspace-analyst/` | | Telegram binding | ✅ account `analyst` (отдельный бот) | | Статус | ✅ **Полностью зарегистрирован и работает** | --- ## Gitea — статус | Параметр | Значение | |----------|----------| | URL | `https://git.mva154.duckdns.org` | | Repos | `enduro-trails`, `orchestrator` | | CI Runner | ✅ `mva154-runner` (online, self-hosted) | | Branch protection | ✅ main: require 1 approval + CI green | | Webhooks → Orchestrator | ✅ Работают (push, PR, status events) | | Service accounts | `admin`, `claude-bot`, `stream` | | claude-bot token | `38c6fa88...` (write:repository) | --- ## Plane — статус | Параметр | Значение | |----------|----------| | URL | `https://plane.mva154.duckdns.org` | | Workspace | `ag_proj` | | Проект | "Enduro Trails" (identifier: ET) | | Issues | ET-1 (POI checkbox) — Todo | | Webhook → Orchestrator | ✅ Через PostgreSQL (HMAC-SHA256) | ### Что НЕ сделано в Plane - ❌ Автоматическое обновление state из Orchestrator (F3-5, F3-6) - ❌ Custom fields (qg_status, stage) - ❌ Лейблы (stage:*, back-to:*, escalation:*) - ❌ Шаблон Work Item --- ## Репозиторий enduro-trails **Ветки:** main (актуальная с ET-001 + ET-002 merged) ### Work Items | ID | Название | Статус | |----|----------|--------| | ET-001 | Исключить шлагбаумы и тротуары из OSRM | ✅ Done (ручной цикл) | | ET-002 | Чекбокс POI в попапе рельефа | ✅ Done (автоматический цикл!) | ### Git history (main после merge) ``` Merge PR #5: feat(ET-002) POI visibility checkbox in terrain popup 832099c docs: restructure phases f561c3b fix: switchMapStyle loads style as JSON fdc9836 Merge PR #4: restore UI phase 5.4 + ET-001 ``` --- ## Следующие шаги (приоритет) ### Критические баги для фикса 1. **Установить git в контейнер orchestrator** — добавить в Dockerfile 2. **Фикс permissions** — агенты должны коммитить от user `slin` (не root) 3. **Привязать task_id к agent_runs** — launcher должен передавать task_id 4. **Автоматический CI → stage advance** — без ручного `:approved:` webhook ### Улучшения 5. **Plane sync** — Orchestrator пишет обратно в Plane (state, comments) 6. **Timeout для агентов** — убивать если > 30 мин 7. **Skip docker build для frontend-only** — определять scope по diff 8. **Notifications** — отправлять статус в Telegram при смене stage --- ## Доступ к mva154 **Из OpenClaw контейнера:** ```bash /home/node/.openclaw/skills/installer/scripts/ssh_exec.sh --host mva154 --cmd "" ``` - Тип: `ssh-direct`, Хост: `82.22.50.71:22`, User: `slin` --- ## Документация проекта | Файл | Описание | |------|----------| | `tasks/multi-agent/BRD.md` | Полный BRD с архитектурой, QG, roadmap | | `tasks/multi-agent/BACKLOG.md` | Бэклог + решения по Analyst | | `tasks/multi-agent/STATUS.md` | **Этот файл** — актуальный статус | | `tasks/multi-agent/DEV_TASK_ORCHESTRATOR_QG.md` | ТЗ: QG + автозапуск (выполнено) | | `tasks/multi-agent/DEV_TASK_WEBHOOKS.md` | ТЗ: Webhooks (выполнено) |