283 lines
12 KiB
Markdown
283 lines
12 KiB
Markdown
# Статус проекта: Мультиагентная разработка ПО
|
||
|
||
**Дата ревью:** 2026-05-21
|
||
**Ревьюер:** Стрим
|
||
|
||
---
|
||
|
||
## Общая зрелость
|
||
|
||
| Фаза (из BRD) | Статус | Комментарий |
|
||
|----------------|--------|-------------|
|
||
| **Фаза 0: Инфраструктура** | ✅ Завершена | Всё установлено и работает |
|
||
| **Фаза 1: Ручной конвейер** | ✅ Завершена | ET-001 прошёл полный цикл |
|
||
| **Фаза 2: Orchestrator MVP** | ✅ Завершена (21.05) | QG реальные, автозапуск Claude CLI работает, 27 тестов green |
|
||
| **Фаза 3: Plane интеграция** | 🟡 В работе (21.05) | Webhook handlers готовы, настройка webhooks в Plane/Gitea UI — в процессе |
|
||
| **Фаза 4: Полный конвейер** | ❌ Не начата | — |
|
||
| **Фаза 5: Оптимизация** | ❌ Не начата | — |
|
||
|
||
---
|
||
|
||
## Инфраструктура на mva154 (82.22.50.71)
|
||
|
||
### Контейнеры (docker ps на 21.05.2026)
|
||
|
||
| Контейнер | Образ | Статус | Порт |
|
||
|-----------|-------|--------|------|
|
||
| `orchestrator` | orchestrator-orchestrator (self-built) | Up 46h | 127.0.0.1:8500 |
|
||
| `openclaw-gateway` | ghcr.io/openclaw/openclaw:latest | Up 15h (healthy) | 127.0.0.1:18789 |
|
||
| `enduro-trails-app-1` | enduro-trails-app (self-built) | Up 5d (**unhealthy**) | 0.0.0.0:5558 |
|
||
| `gitea` | gitea/gitea:latest | Up 2d | 127.0.0.1:3000, 0.0.0.0:2222 |
|
||
| `claude-cli-proxy` | eceasy/cli-proxy-api:latest | Up 6d | 127.0.0.1:8317 |
|
||
| `xray` | ghcr.io/xtls/xray-core:latest | Up 2w | — |
|
||
| `plane-app-proxy-1` | makeplane/plane-proxy:stable | Up 5d | 0.0.0.0:8091, 0.0.0.0:8443 |
|
||
| `plane-app-live-1` | makeplane/plane-live:stable | Up 5d | 3000 (internal) |
|
||
| `plane-app-space-1` | makeplane/plane-space:stable | Up 5d (healthy) | 3000 (internal) |
|
||
| `plane-app-admin-1` | makeplane/plane-admin:stable | Up 5d (healthy) | 3000 (internal) |
|
||
| `plane-app-web-1` | makeplane/plane-frontend:stable | Up 5d (healthy) | 3000 (internal) |
|
||
| `plane-app-beat-worker-1` | makeplane/plane-backend:stable | Up 5d | 8000 (internal) |
|
||
| `plane-app-worker-1` | makeplane/plane-backend:stable | Up 5d | 8000 (internal) |
|
||
| `plane-app-api-1` | makeplane/plane-backend:stable | Up 5d | 8000 (internal) |
|
||
| `plane-app-plane-db-1` | postgres:15.7-alpine | Up 5d | 5432 (internal) |
|
||
| `plane-app-plane-mq-1` | rabbitmq:3.13.6-management-alpine | Up 5d | 5672 (internal) |
|
||
| `plane-app-plane-minio-1` | minio/minio:latest | Up 5d | 9000 (internal) |
|
||
| `plane-app-plane-redis-1` | valkey/valkey:7.2.11-alpine | Up 2w | 6379 (internal) |
|
||
|
||
### Установленное ПО на хосте
|
||
|
||
| Компонент | Версия | Путь |
|
||
|-----------|--------|------|
|
||
| Claude Code CLI | 2.1.142 | `/usr/bin/claude` |
|
||
| Node.js | v24.14.0 | — |
|
||
| Docker + Compose | — | — |
|
||
| Nginx | — | reverse proxy |
|
||
| Gitea Actions Runner | `act_runner` | `/home/slin/act_runner` |
|
||
|
||
### Директории на хосте
|
||
|
||
```
|
||
/home/slin/
|
||
├── openclaw/ # docker-compose.yml для OpenClaw + Xray
|
||
├── repos/
|
||
│ ├── enduro-trails/ # Пилотный проект (git repo)
|
||
│ └── orchestrator/ # Orchestrator (git repo)
|
||
├── gitea/ # docker-compose.yml для Gitea
|
||
├── gitea-data/ # Gitea data volume
|
||
├── plane-selfhost/ # Plane docker-compose
|
||
├── claude-cli-proxy/ # CLI proxy config
|
||
├── enduro-trails/ # Отдельная копия (app container)
|
||
├── act_runner/ # Gitea Actions runner binary
|
||
├── act_runner_data/ # Runner data
|
||
├── n8n/ # n8n (не запущен?)
|
||
├── duckdns/ # DuckDNS update script
|
||
└── backups/ # Бэкапы
|
||
```
|
||
|
||
---
|
||
|
||
## Orchestrator — детальный статус
|
||
|
||
**Репо:** `/home/slin/repos/orchestrator/`
|
||
**Контейнер:** `orchestrator` (порт 8500)
|
||
**Конфиг:** `.env` (ORCH_PLANE_API_URL, ORCH_GITEA_URL, ORCH_CLAUDE_BIN, ORCH_REPOS_DIR)
|
||
|
||
### Что работает
|
||
|
||
- ✅ FastAPI app запущен, `/health` отвечает 200
|
||
- ✅ `/webhook/plane` — принимает events, пишет в SQLite
|
||
- ✅ `/webhook/gitea` — принимает events, пишет в SQLite
|
||
- ✅ `/status` — показывает active tasks
|
||
- ✅ SQLite БД инициализирована (tables: events, tasks, agent_runs)
|
||
- ✅ AgentLauncher — класс написан, конфиги 5 агентов определены
|
||
|
||
### Что реализовано (21.05.2026 — DEV_TASK_ORCHESTRATOR_QG)
|
||
|
||
- ✅ `qg/checks.py` — 5 реальных QG-проверок (filesystem + Gitea API)
|
||
- ✅ `handle_work_item_created` — создаёт task + ветку в Gitea + папку docs
|
||
- ✅ `handle_comment` — `:approved:` → QG check → advance stage → launch agent
|
||
- ✅ `handle_push` / `handle_pr` / `handle_ci_status` — полная обработка
|
||
- ✅ AgentLauncher — Claude CLI запускается из контейнера (binary mount)
|
||
- ✅ Stage machine (`src/stages.py`) — конечный автомат 8 стадий
|
||
- ✅ Notifications (`src/notifications.py`) — structured logging
|
||
- ✅ 27 тестов — all green
|
||
- ✅ Nginx proxy_pass `/orchestrator/` → localhost:8500 (уже был настроен)
|
||
- 🟡 Plane webhooks → Orchestrator — настройка в процессе
|
||
- 🟡 Gitea webhooks → Orchestrator — настройка в процессе
|
||
|
||
### Данные в БД (на 21.05.2026)
|
||
|
||
- events: 15 (4 старых + 11 от smoke tests)
|
||
- tasks: 6 (2 старых + 4 smoke tests: ET-001..ET-004)
|
||
- agent_runs: 3 (2x architect, 1x developer — реальные запуски Claude CLI)
|
||
|
||
---
|
||
|
||
## Репозиторий enduro-trails — детальный статус
|
||
|
||
**Репо:** `/home/slin/repos/enduro-trails/` (Gitea: `admin/enduro-trails`)
|
||
**Ветки:** main, feature/ET-001-barriers-footways, feature/ET-002-poi-toggle (active), feature/bootstrap, feature/migrate-prototype
|
||
**Коммитов:** 22
|
||
|
||
### Структура (каноническая, по BRD)
|
||
|
||
```
|
||
enduro-trails/
|
||
├── CLAUDE.md ✅ Полный паспорт проекта
|
||
├── CHANGELOG.md ✅
|
||
├── Makefile ✅ (make dev/test/lint/build)
|
||
├── Dockerfile ✅
|
||
├── docker-compose.yml ✅
|
||
├── pyproject.toml ✅
|
||
├── run_architect.sh ✅ Скрипт ручного запуска
|
||
├── run_dev.sh ✅
|
||
├── run_review.sh ✅
|
||
├── run_test.sh ✅
|
||
├── .openclaw/agents/
|
||
│ ├── architect.md ✅ System prompt (Opus)
|
||
│ ├── developer.md ✅ System prompt (Sonnet)
|
||
│ ├── reviewer.md ✅
|
||
│ ├── tester.md ✅
|
||
│ └── deployer.md ✅
|
||
├── docs/work-items/
|
||
│ ├── ET-001/ ✅ ПОЛНЫЙ ЦИКЛ (merged)
|
||
│ │ ├── 00-business-request.md
|
||
│ │ ├── 01-brd.md
|
||
│ │ ├── 02-trz.md
|
||
│ │ ├── 03-acceptance-criteria.md
|
||
│ │ ├── 04-test-plan.yaml
|
||
│ │ ├── 06-adr/
|
||
│ │ ├── 07-infra-requirements.md
|
||
│ │ ├── 12-review.md ✅ APPROVED
|
||
│ │ └── 13-test-report.md ✅ PASS
|
||
│ └── ET-002/ 🟡 В РАБОТЕ (analysis done, approved)
|
||
│ ├── 00-business-request.md
|
||
│ ├── 01-brd.md
|
||
│ ├── 02-trz.md
|
||
│ ├── 03-acceptance-criteria.md
|
||
│ └── 04-test-plan.yaml
|
||
├── src/ ✅
|
||
├── tests/ ✅
|
||
├── scripts/ ✅
|
||
├── migrations/ ✅
|
||
└── infra/ ✅
|
||
```
|
||
|
||
### Work Items — прогресс
|
||
|
||
| ID | Название | Этап | Статус |
|
||
|----|----------|------|--------|
|
||
| ET-001 | Исключить шлагбаумы и тротуары из OSRM | Done | ✅ Полный цикл: BRD → ADR → код → review (APPROVED) → test (PASS) → merged |
|
||
| ET-002 | Чекбокс POI в попапе рельефа | Analysis → approved | 🟡 BRD/ТЗ/AC/TestPlan готовы, status=approved, ветка создана, ждёт Architect |
|
||
|
||
### Git history (последние коммиты)
|
||
|
||
```
|
||
73c9dc4 docs(ET-002): status → approved
|
||
f1f4d5f docs(ET-002): BRD, ТЗ, AC, Test Plan
|
||
832099c docs: restructure phases
|
||
f561c3b fix: switchMapStyle loads style as JSON
|
||
fdc9836 Merge PR #4: restore UI phase 5.4 + ET-001
|
||
8d36f38 fix: restore UI to phase 5.4
|
||
0d57e47 test(ET-001): test report — PASS
|
||
d171629 review(ET-001): code review — APPROVED
|
||
e263f84 feat(ET-001): implement barrier blocking and footway exclusion
|
||
c44dc5c arch(ET-001): ADR, infra requirements
|
||
```
|
||
|
||
---
|
||
|
||
## Analyst agent (OpenClaw) — статус
|
||
|
||
**Workspace:** `/home/node/.openclaw/workspace-analyst/`
|
||
|
||
### Что есть
|
||
|
||
- ✅ SOUL.md, IDENTITY.md, AGENTS.md, TOOLS.md, HEARTBEAT.md
|
||
- ✅ ET-002 артефакты (BRD, ТЗ, AC, test plan) — сгенерированы
|
||
- ✅ Workspace-state.json (OpenClaw знает о нём)
|
||
|
||
### Что НЕ сделано
|
||
|
||
- ❌ Не зарегистрирован в `openclaw.json` → `agents.list[]`
|
||
- ❌ Нет Telegram binding (не получает сообщения напрямую)
|
||
- ❌ Нет отдельного Telegram-бота/группы
|
||
- ❌ Нет доступа к Plane API (PLANE_API_TOKEN не в env)
|
||
- ❌ Нет доступа к Gitea (SSH key / token)
|
||
|
||
---
|
||
|
||
## Plane — статус
|
||
|
||
**URL:** `https://plane.mva154.duckdns.org` (порт 8091/8443)
|
||
**Workspace slug:** `ag_proj`
|
||
|
||
### Что есть
|
||
|
||
- ✅ Plane развёрнут и работает (все контейнеры healthy)
|
||
- ✅ Workspace создан
|
||
|
||
### Что НЕ сделано
|
||
|
||
- ❌ Webhooks → Orchestrator не настроены
|
||
- ❌ Custom fields (qg_status, stage) не созданы
|
||
- ❌ Лейблы (stage:*, back-to:*, escalation:*) не созданы
|
||
- ❌ Шаблон Work Item с подзадачами не создан
|
||
|
||
---
|
||
|
||
## Gitea — статус
|
||
|
||
**URL:** `https://git.mva154.duckdns.org` (порт 3000 internal)
|
||
**Домен:** `git.mva154.duckdns.org`
|
||
|
||
### Что есть
|
||
|
||
- ✅ Gitea работает
|
||
- ✅ Репо `enduro-trails` с полной структурой
|
||
- ✅ Репо `orchestrator`
|
||
- ✅ CI workflow (Gitea Actions) — self-hosted runner (`act_runner`)
|
||
- ✅ Service account `claude-bot` (предположительно — коммиты от агентов)
|
||
|
||
### Что НЕ проверено / не сделано
|
||
|
||
- ❓ Branch protection на main (require PR, require CI green)
|
||
- ❓ Gitea Actions runner — работает ли сейчас?
|
||
- ❌ Webhooks → Orchestrator не настроены в Gitea UI
|
||
|
||
---
|
||
|
||
## Доступ к mva154
|
||
|
||
**Из OpenClaw контейнера:**
|
||
```bash
|
||
/home/node/.openclaw/skills/installer/scripts/ssh_exec.sh --host mva154 --cmd "<command>"
|
||
```
|
||
- Тип: `ssh-direct`
|
||
- Хост: `82.22.50.71:22`
|
||
- User: `slin`
|
||
- Auth: password (`MVA154_PASSWORD` из .env)
|
||
- Sudo: yes (`MVA154_SUDO_PASS`)
|
||
|
||
---
|
||
|
||
## Следующие шаги (приоритет)
|
||
|
||
1. **Дотянуть Orchestrator** — реализовать QG-проверки и автозапуск агентов (заглушки → реальная логика)
|
||
2. **Настроить webhooks** — Plane → Orchestrator, Gitea → Orchestrator
|
||
3. **Nginx proxy** — добавить `/orchestrator/` location
|
||
4. **Зарегистрировать Analyst** в openclaw.json + binding
|
||
5. **Прогнать ET-002** через автоматический пайплайн (первый автоматический запуск)
|
||
|
||
---
|
||
|
||
## Документация проекта
|
||
|
||
| Файл | Описание |
|
||
|------|----------|
|
||
| `tasks/multi-agent/BRD.md` | Полный BRD с архитектурой, QG, roadmap |
|
||
| `tasks/multi-agent/BACKLOG.md` | Бэклог + решения по Analyst |
|
||
| `tasks/multi-agent/DEV_TASK_ORCHESTRATOR_MVP.md` | ТЗ для Dev-агента на Orchestrator |
|
||
| `tasks/multi-agent/STATUS.md` | **Этот файл** — актуальный статус |
|
||
| `tasks/multi-agent/proposal_v1/` | Исходный proposal |
|
||
| `tasks/multi-agent/reports/` | Отчёты Dev-агента |
|