auto-sync: 2026-05-21 22:00:01

This commit is contained in:
Stream
2026-05-21 22:00:01 +03:00
parent 180f8dc54b
commit 1864cdb5af
2 changed files with 77 additions and 49 deletions

View File

@@ -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

View File

@@ -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 (выполнено) |