auto-sync: 2026-05-21 22:00:01
This commit is contained in:
@@ -63,13 +63,21 @@ Dev-агент (run `624ca711`) выполнил все 5 фиксов:
|
||||
|
||||
Rebuild успешен: git v2.47.3 в контейнере, health OK.
|
||||
|
||||
## Dev-агент: Plane sync (18:00+)
|
||||
## Dev-агент: Plane sync (18:00-18:55)
|
||||
|
||||
Запущен Dev-агент (run `bad29612`) на добавление обратной связи Orchestrator → Plane:
|
||||
- Новый модуль `src/plane_sync.py`
|
||||
- Обновление state issue при смене stage
|
||||
- Комментарии в Plane при каждом переходе
|
||||
- Интеграция в webhooks/plane.py и webhooks/gitea.py
|
||||
Dev-агент (run `bad29612`) создал `src/plane_sync.py`, интегрировал в `webhooks/plane.py`.
|
||||
Таймаутнулся на `gitea.py` — дозавершила вручную.
|
||||
|
||||
Результат:
|
||||
- ✅ `src/plane_sync.py` — модуль обратной связи (find_issue, update_state, add_comment)
|
||||
- ✅ Интеграция в `webhooks/plane.py` — при advance stage → comment + state update
|
||||
- ✅ Интеграция в `webhooks/gitea.py` — при CI green / PR approve → comment + state update
|
||||
- ✅ Маппинг через `plane_issue_id` колонку в БД (primary lookup)
|
||||
- ✅ Автосохранение `plane_issue_id` при `work_item.created` webhook
|
||||
- ✅ Smoke test: ET-002 state → Done в Plane, тестовый комментарий добавлен
|
||||
|
||||
Проблема найденная: `work_item_id` в Orchestrator (ET-002) ≠ `sequence_id` в Plane (1).
|
||||
Решение: DB lookup по `plane_issue_id` (UUID), fallback на Plane API search.
|
||||
|
||||
### Plane
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Статус проекта: Мультиагентная разработка ПО
|
||||
|
||||
**Дата обновления:** 2026-05-21 16:35 UTC
|
||||
**Дата обновления:** 2026-05-21 18:55 UTC
|
||||
**Ревьюер:** Стрим
|
||||
|
||||
---
|
||||
@@ -12,9 +12,9 @@
|
||||
| **Фаза 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 |
|
||||
| **Фаза 3: Plane интеграция** | ✅ Завершена (21.05) | Webhooks + обратная связь (state sync, comments) |
|
||||
| **Фаза 4: Полный конвейер** | ✅ Первый прогон (21.05) | ET-002 прошёл полный автоматический цикл! |
|
||||
| **Фаза 5: Оптимизация** | 🟡 Частично | Баги найдены, часть исправлена |
|
||||
| **Фаза 5: Оптимизация** | 🟡 В работе | Баги исправлены, auto-advance добавлен |
|
||||
|
||||
---
|
||||
|
||||
@@ -46,18 +46,20 @@ f1f4d5f docs(ET-002): BRD, ТЗ, AC, Test Plan
|
||||
|
||||
---
|
||||
|
||||
## Баги найденные при прогоне (21.05.2026)
|
||||
## Баги и фиксы (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 избыточен |
|
||||
| 1 | `/repos` mounted as `:ro` | ✅ Исправлен | Убрал `:ro` из docker-compose.yml |
|
||||
| 2 | `check_review_approved` — PR not found | ✅ Исправлен | Lookup PR по branch + file-based fallback |
|
||||
| 3 | `git` не установлен в контейнере | ✅ Исправлен | Уже был в Dockerfile (git v2.47.3) |
|
||||
| 4 | Коммиты от root ломают permissions | ✅ Исправлен | GIT_AUTHOR_NAME/EMAIL = claude-bot в launcher.py |
|
||||
| 5 | `task_id=NULL` в agent_runs | ✅ Исправлен | task_id передаётся в launch() |
|
||||
| 6 | Нет timeout для агентов | ✅ Исправлен | Watchdog 30 мин, kill -9 |
|
||||
| 7 | Нет auto-advance после CI green | ✅ Исправлен | gitea.py: CI green → review, PR approved → testing |
|
||||
| 8 | Orchestrator не пишет в Plane | ✅ Исправлен | plane_sync.py: state update + comments |
|
||||
| 9 | `dismiss_stale_approvals` + duplicate CI statuses | ⚠️ Workaround | Временно отключал status check для merge |
|
||||
| 10 | Developer застревает на `docker build` (~55 мин) | 🔴 Не исправлен | Для frontend-only фич docker build избыточен |
|
||||
|
||||
---
|
||||
|
||||
@@ -69,7 +71,7 @@ f1f4d5f docs(ET-002): BRD, ТЗ, AC, Test Plan
|
||||
|-----------|-------|--------|------|
|
||||
| `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 |
|
||||
| `enduro-trails-app-1` | enduro-trails-app (self-built) | Up | 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 | — |
|
||||
@@ -102,13 +104,14 @@ src/
|
||||
├── db.py # SQLite connection
|
||||
├── stages.py # Stage machine (8 stages)
|
||||
├── notifications.py # Structured logging
|
||||
├── plane_sync.py # ← NEW: Plane API sync (state + comments)
|
||||
├── webhooks/
|
||||
│ ├── plane.py # Plane webhook handler + QG orchestration
|
||||
│ └── gitea.py # Gitea webhook handler (push, PR, CI status)
|
||||
│ ├── plane.py # Plane webhook handler + QG orchestration + plane_sync calls
|
||||
│ └── gitea.py # Gitea webhook handler (push, PR, CI status) + plane_sync calls
|
||||
├── qg/
|
||||
│ └── checks.py # 5 QG checks (filesystem + Gitea API)
|
||||
└── agents/
|
||||
└── launcher.py # Claude CLI launcher (subprocess.Popen)
|
||||
└── launcher.py # Claude CLI launcher (subprocess.Popen + timeout watchdog)
|
||||
```
|
||||
|
||||
### Stage Machine
|
||||
@@ -119,11 +122,31 @@ created → analysis → architecture → development → review → testing →
|
||||
↑ Agent: — ↑ Agent: arch ↑ Agent: dev ↑ Agent: reviewer ↑ Agent: tester
|
||||
```
|
||||
|
||||
### Auto-advance (добавлено 21.05)
|
||||
|
||||
| Триггер | Действие |
|
||||
|---------|----------|
|
||||
| Push с ADR файлами | architecture → development, launch Developer |
|
||||
| CI status = success | development → review, launch Reviewer |
|
||||
| PR review = approved | review → testing, launch Tester |
|
||||
| PR review = request_changes | back-to development, relaunch Developer (max 3x) |
|
||||
| Test report PASS | testing → deploy |
|
||||
|
||||
### Plane Sync (добавлено 21.05)
|
||||
|
||||
| Событие | Действие в Plane |
|
||||
|---------|-----------------|
|
||||
| Stage change | PATCH issue state (Todo/In Progress/Done) + comment |
|
||||
| QG failure | Comment с причиной |
|
||||
| Task done | State → Done + closing comment |
|
||||
| Task created (webhook) | Сохраняет `plane_issue_id` для маппинга |
|
||||
|
||||
### Данные в БД (на 21.05.2026)
|
||||
|
||||
- events: 40+
|
||||
- tasks: 6 (ET-001..ET-004 + smoke tests)
|
||||
- agent_runs: 8 (architect x4, developer x1, reviewer x1, tester x1)
|
||||
- Таблица tasks: добавлена колонка `plane_issue_id` (UUID из Plane)
|
||||
|
||||
### Docker-compose.yml
|
||||
|
||||
@@ -136,7 +159,7 @@ services:
|
||||
network_mode: host
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
- /home/slin/repos:/repos # ← БЕЗ :ro (исправлено 21.05)
|
||||
- /home/slin/repos:/repos # БЕЗ :ro
|
||||
- /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
|
||||
@@ -185,15 +208,20 @@ services:
|
||||
| URL | `https://plane.mva154.duckdns.org` |
|
||||
| Workspace | `ag_proj` |
|
||||
| Проект | "Enduro Trails" (identifier: ET) |
|
||||
| Issues | ET-1 (POI checkbox) — Todo |
|
||||
| Webhook → Orchestrator | ✅ Через PostgreSQL (HMAC-SHA256) |
|
||||
| Project ID | `7a79f0a9-5278-49cd-9007-9a338f238f9c` |
|
||||
| Issues | ET-1 (POI checkbox) — **Done** ✅ |
|
||||
| Webhook → Orchestrator | ✅ Через PostgreSQL trigger (HMAC-SHA256) |
|
||||
| Orchestrator → Plane | ✅ State sync + comments (plane_sync.py) |
|
||||
|
||||
### Что НЕ сделано в Plane
|
||||
### States в Plane
|
||||
|
||||
- ❌ Автоматическое обновление state из Orchestrator (F3-5, F3-6)
|
||||
- ❌ Custom fields (qg_status, stage)
|
||||
- ❌ Лейблы (stage:*, back-to:*, escalation:*)
|
||||
- ❌ Шаблон Work Item
|
||||
| ID | Name | Group |
|
||||
|----|------|-------|
|
||||
| `113b24f6-...` | Backlog | backlog |
|
||||
| `2c7d3df3-...` | Todo | unstarted |
|
||||
| `b873d9eb-...` | In Progress | started |
|
||||
| `381a2833-...` | Done | completed |
|
||||
| `b1cae7f9-...` | Cancelled | cancelled |
|
||||
|
||||
---
|
||||
|
||||
@@ -208,32 +236,22 @@ services:
|
||||
| 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
|
||||
1. **`dismiss_stale_approvals` + duplicate CI statuses** — Gitea создаёт duplicate pending statuses, блокирует merge. Нужно: либо отключить dismiss_stale_approvals, либо чистить stale statuses через API.
|
||||
2. **Developer застревает на docker build** — для frontend-only фич нужен skip docker build или определение scope по git diff.
|
||||
|
||||
### Улучшения
|
||||
### Улучшения для полной автономности
|
||||
|
||||
5. **Plane sync** — Orchestrator пишет обратно в Plane (state, comments)
|
||||
6. **Timeout для агентов** — убивать если > 30 мин
|
||||
7. **Skip docker build для frontend-only** — определять scope по diff
|
||||
8. **Notifications** — отправлять статус в Telegram при смене stage
|
||||
3. **Deploy stage** — автоматический merge PR + deploy (сейчас ручной)
|
||||
4. **Notifications в Telegram** — отправлять Славе статус при смене stage
|
||||
5. **Custom fields в Plane** — qg_status, stage, tokens_spent
|
||||
6. **Лейблы в Plane** — stage:*, back-to:*, escalation:*
|
||||
7. **Параллельные задачи** — FIFO-очередь (F2-6 из BRD)
|
||||
|
||||
---
|
||||
|
||||
@@ -255,4 +273,6 @@ fdc9836 Merge PR #4: restore UI phase 5.4 + ET-001
|
||||
| `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_ORCHESTRATOR_FIXES.md` | ТЗ: 5 критических фиксов (выполнено) |
|
||||
| `tasks/multi-agent/DEV_TASK_PLANE_SYNC.md` | ТЗ: Plane sync (выполнено) |
|
||||
| `tasks/multi-agent/DEV_TASK_WEBHOOKS.md` | ТЗ: Webhooks (выполнено) |
|
||||
|
||||
Reference in New Issue
Block a user