auto-sync: 2026-06-03 23:50:01
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
# Документация: Orchestrator Multi-Agent Pipeline
|
||||
|
||||
## Статус: 2026-06-01 (актуально)
|
||||
## Статус: 2026-06-03 (актуально)
|
||||
|
||||
> **Свежее (03.06.2026):** переход на **status-only verdict model** (PR #12) — вердикт Славы теперь через **смену статуса** Issue (Approved/Rejected), а НЕ через коммент `:approved:`. Закрыты 4 бага входа/выхода analyst (PR #12–#15). Конвейер впервые прошёл analysis→architecture через живой Approved. Подробности — в разделах «Переходы статусов» и Changelog.
|
||||
|
||||
---
|
||||
|
||||
@@ -89,19 +91,27 @@ created → analysis → architecture → development → review → testing →
|
||||
| **Done** | `381a2833...` | Всё задеплоено | Готово |
|
||||
| **Cancelled** | `b1cae7f9...` | Отменена | — |
|
||||
|
||||
### Переходы статусов
|
||||
### Переходы статусов (status-only verdict model, PR #12, 03.06.2026)
|
||||
|
||||
> **Ключевое изменение:** вердикт Славы принимается **только по смене статуса** Issue в Plane (**Approved** / **Rejected**), не по комменту `:approved:`. Комменты теперь `logged only, no pipeline action`. Причина Rejected берётся из последнего коммента.
|
||||
|
||||
```
|
||||
Backlog → [QG-0 pass] → In Progress (analyst запущен)
|
||||
In Progress → [analyst questions] → Needs Input
|
||||
Needs Input → [Слава ответил] → In Progress (analyst перезапущен)
|
||||
In Progress → [analyst done] → In Review (ждёт :approved:)
|
||||
In Review → [:approved:] → In Progress (architect запущен)
|
||||
In Review → [:rejected:] → In Progress (analyst перезапущен с причиной)
|
||||
In Progress → [все этапы до done] → Done
|
||||
In Progress → [analyst done] → In Review (BRD/ТЗ/AC готовы, ждёт статус Approved)
|
||||
In Review → [Слава → статус Approved] → Architecture (architect запущен) ← БАГ 4 фикс (PR #15)
|
||||
In Review → [Слава → статус Rejected + причина комментом] → In Progress (analyst перезапущен)
|
||||
Architecture → [architect done + QG] → Development → ... → Done
|
||||
In Progress → [3 retry исчерпаны / deploy fail] → Blocked
|
||||
```
|
||||
|
||||
**Статусы-вердикты (новые):**
|
||||
- **Approved** (`a519a341...`) — Слава одобрил ТЗ → конвейер двигается на следующую стадию (analysis→architecture).
|
||||
- **Rejected** — Слава отклонил → причина из коммента → analyst перезапуск.
|
||||
- **Architecture** (`3020bbb7...`) — рабочая стадия architect.
|
||||
- Без мелькания In Progress при advance: `_try_advance_stage` сразу PATCH-ит статус следующей стадии.
|
||||
|
||||
### Комментарии в Plane
|
||||
|
||||
Orchestrator автоматически пишет комментарии при:
|
||||
@@ -114,16 +124,21 @@ Orchestrator автоматически пишет комментарии при
|
||||
|
||||
### Ссылки в комментариях
|
||||
|
||||
При переходах stage комментарий содержит:
|
||||
- 📂 Branch: ссылка на ветку в Gitea
|
||||
- 🔗 PR: ссылка на Pull Request (если есть, на этапах review/testing/deploy)
|
||||
При переходах stage / готовности analyst комментарий содержит кликабельные ссылки на доки (BRD/ТЗ/AC) + branch/PR.
|
||||
|
||||
> **ВАЖНО (PR #14, 03.06.2026):** ссылки строятся от **отдельного публичного URL** `gitea_public_url` (env `ORCH_GITEA_PUBLIC_URL`, прод: `https://git.mva154.duckdns.org`), А НЕ от внутреннего `gitea_url` (`localhost:3000`, он для git clone/push). Без этого ссылки вели на localhost и не кликались из браузера. Fallback: если `gitea_public_url` пустой → используется `gitea_url`.
|
||||
|
||||
- 📂 Branch: ссылка на ветку в Gitea (публичный URL)
|
||||
- 🔗 PR: ссылка на Pull Request (на этапах review/testing/deploy)
|
||||
- 📄 Доки: Business request / BRD / ТЗ / Acceptance Criteria (публичный URL, кликабельные)
|
||||
|
||||
### Webhook events
|
||||
|
||||
| Event | Действие |
|
||||
|-------|----------|
|
||||
| `work_item.created` / `issue.created` | QG-0 → create branch → init docs → launch analyst |
|
||||
| `comment.created` / `issue_comment.created` | Проверка `:approved:` / `:rejected:` / ответ на вопросы |
|
||||
| `issue.updated` (смена статуса) | **Главный вердикт-путь (PR #12):** Approved → advance, Rejected → rollback+relaunch, In Progress → start pipeline |
|
||||
| `comment.created` / `issue_comment.created` | **Только лог** (`logged only, no pipeline action`) — комменты БОЛЬШЕ НЕ двигают конвейер (было: `:approved:`/`:rejected:`). Причина Rejected читается из последнего коммента при вердикте |
|
||||
|
||||
### QG-0: Валидация при создании Issue
|
||||
|
||||
@@ -308,10 +323,31 @@ SSH ключ orchestrator'а: `/home/slin/.orchestrator-ssh/id_ed25519` (смо
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Баги входа/выхода analyst — сессия 03.06.2026 (PR #12–#15)
|
||||
|
||||
Цепочка из 4 багов, вскрытых при переходе на status-only verdict model и прогоне реальной задачи ET-011 (#6, task 29). Все подтверждены боевыми прогонами.
|
||||
|
||||
| # | PR | Баг | Корень | Фикс |
|
||||
|---|----|----|--------|------|
|
||||
| Баг 3 | **#12** | Эхо-самоудар: собственный коммент/статус analyst сбивал стадию | Коммент-вердикт (`:approved:`) ловился на собственных комментах бота | **status-only verdict model**: вердикт только по смене статуса, комменты `logged only` |
|
||||
| Баг A | **#13** | `description` из Plane НЕ попадал в `.task.md` (пустышка 101 байт) | Описание тянулось из API, но не писалось в файл задачи | `.task.md` = 973 байта с полным ТЗ |
|
||||
| Баг B | **#13** | `name` не дотягивался → ветка `untitled` | Имя Issue не читалось из API | ветка `feature/ET-011-popup-enduro-trails` |
|
||||
| Баг C | **#13** | Устаревший коммент «Жду :approved:» + нет ссылок на доки | Коммент analyst не обновлён под status-only | коммент про Approved-статус + ссылки на 6 доков |
|
||||
| — | **#14** | Ссылки в комменте вели на `localhost:3000` — не кликались из браузера | Ссылки строились от внутреннего `gitea_url` | новое поле `gitea_public_url` (env `ORCH_GITEA_PUBLIC_URL`), fallback на `gitea_url`; git-операции не тронуты |
|
||||
| **Баг 4** | **#15** | **БЛОКЕР:** ручной Approved из analysis НЕ двигал конвейер — task застревал в analysis, architect не запускался | `advance_stage()`: ветка `check_analysis_approved` ВСЕГДА делала ранний `return result` → блок Advance недостижим. На webhook-пути (Approved, `finished_agent=None`) `_handle_analysis_approved_flow` выходил ничего не делая | развёл ветку по `agent`: `analyst`(launcher)→flow+return (In Review+коммент), `None`(вердикт)→провал в Advance (update_task_stage+enqueue architect) |
|
||||
|
||||
**Итог:** конвейер впервые прошёл **analysis→architecture end-to-end** через живой Approved Славы. architect запущен, создал ADR-014/ADR-015 + infra-requirements.
|
||||
|
||||
---
|
||||
|
||||
## Changelog
|
||||
|
||||
| Дата | Изменение |
|
||||
|------|-----------|
|
||||
| 2026-06-03 | **PR #15** Fix Баг 4: Approved-вердикт двигает analysis→architecture (развёд `check_analysis_approved` по `finished_agent`) |
|
||||
| 2026-06-03 | **PR #14** Add: `gitea_public_url` — внешний URL для кликабельных ссылок в комментах (git-операции на localhost не тронуты) |
|
||||
| 2026-06-03 | **PR #13** Fix Баги A/B/C: `description`→`.task.md`, `name`→ветка (не untitled), коммент analyst под status-only + ссылки на доки |
|
||||
| 2026-06-03 | **PR #12** Add: **status-only verdict model** — вердикт по смене статуса (Approved/Rejected), комменты `logged only` (фикс Баг 3 эхо-самоудар) |
|
||||
| 2026-05-31 | Fix: `_monitor_agent` PIPE streaming (race condition) |
|
||||
| 2026-05-31 | Fix: `check_reviewer_verdict` вместо `check_review_approved` |
|
||||
| 2026-05-31 | Add: `_ensure_pr` (auto-PR after developer push) |
|
||||
|
||||
@@ -1,22 +1,25 @@
|
||||
# Статус проекта: Мультиагентная разработка ПО
|
||||
|
||||
**Дата обновления:** 2026-06-02 21:10 UTC
|
||||
**Дата обновления:** 2026-06-03 20:50 UTC
|
||||
**Ревьюер:** Стрим
|
||||
|
||||
---
|
||||
|
||||
## 📌 Свежее (2026-06-02) — подробности в `PROGRESS_2026-06-02.md`
|
||||
## 📌 Свежее (2026-06-03) — сессия багов входа/выхода analyst
|
||||
|
||||
| Работа | Статус |
|
||||
|--------|--------|
|
||||
| Инцидент webhook автозапуск (мусор в enduro-trails) | 🟢 локализован, вычищен |
|
||||
| **ORCH-6 multi-repo** (root fix: фильтр проекта + repo/prefix per project) | 🟢 замержен **PR #2**, проверен на проде |
|
||||
| Plane-webhook | 🟢 включён обратно (`is_active=t`), защита боевая (HMAC + project filter) |
|
||||
| **ORCH-1 очередь задач** (персистентная, restart-safe, retry, max_concurrency) | 🟢 база готова **PR #3** (76 passed), проверена |
|
||||
| **ORCH-1b resilience** (preflight + 429-классификатор + backoff + circuit breaker) | 🔄 в работе поверх PR #3 |
|
||||
| **PR #12** status-only verdict model (вердикт по статусу, не комменту; фикс Баг 3 эхо-самоудар) | 🟢 смержен, на проде |
|
||||
| **PR #13** Баги A/B/C: `description`→`.task.md`, `name`→ветка, коммент analyst + ссылки | 🟢 смержен, боевой прогон чистый |
|
||||
| **PR #14** `gitea_public_url` — внешние кликабельные ссылки в комментах | 🟢 смержен, env прописан на проде |
|
||||
| **PR #15** Баг 4 (блокер): Approved-вердикт двигает analysis→architecture | 🟢 смержен, боевой прогон ✅ |
|
||||
| 🎉 Конвейер analysis→architecture end-to-end через живой Approved | 🟢 впервые пройден на ET-011 (#6, task 29) |
|
||||
|
||||
**Дальше:** дождаться resilience → проверить вживую → слить PR #3 одним куском. Бэклог: ORCH-3 (rollback), ORCH-4 (stage-engine), ORCH-5 (idempotency).
|
||||
**Висят:** PR #19 (enduro-trails), PR #1 (orchestrator worktree) — мержить?
|
||||
**Дальше:** architect отработал (ADR-014/015 + infra-req) → дождаться финала + QG architecture → Development. Проверить Rejected-путь живьём.
|
||||
**Детали:** `tasks/orchestrator/ORCHESTRATOR_DOCS.md` → раздел «🐛 Баги входа/выхода analyst» + `memory/2026-06-03.md`.
|
||||
|
||||
### Предыдущая сессия (2026-06-02)
|
||||
- ORCH-6 multi-repo (PR #2), ORCH-1 очередь (PR #3), Plane-webhook включён с HMAC+project-filter — всё на проде. Подробности: `PROGRESS_2026-06-02.md`.
|
||||
|
||||
---
|
||||
|
||||
@@ -76,6 +79,21 @@ f1f4d5f docs(ET-002): BRD, ТЗ, AC, Test Plan
|
||||
| 9 | `dismiss_stale_approvals` + duplicate CI statuses | ⚠️ Workaround | Временно отключал status check для merge |
|
||||
| 10 | Developer застревает на `docker build` (~55 мин) | 🔴 Не исправлен | Для frontend-only фич docker build избыточен |
|
||||
|
||||
## Баги входа/выхода analyst (03.06.2026) — PR #12–#15
|
||||
|
||||
Цепочка из 4 багов, вскрытых при переходе на status-only verdict и боевом прогоне ET-011 (#6, task 29). Полный разбор: `ORCHESTRATOR_DOCS.md`.
|
||||
|
||||
| # | PR | Баг | Статус |
|
||||
|---|----|----|--------|
|
||||
| Баг 3 | #12 | Эхо-самоудар: собственный коммент analyst сбивал стадию → status-only verdict model | ✅ Смержен |
|
||||
| Баг A | #13 | `description` из Plane не попадал в `.task.md` (пустышка) | ✅ Смержен |
|
||||
| Баг B | #13 | `name` не дотягивался → ветка `untitled` | ✅ Смержен |
|
||||
| Баг C | #13 | Устаревший коммент «Жду :approved:» + нет ссылок на доки | ✅ Смержен |
|
||||
| — | #14 | Ссылки в комменте на `localhost:3000` (не кликались) → `gitea_public_url` | ✅ Смержен + env |
|
||||
| **Баг 4** | #15 | **БЛОКЕР:** ручной Approved не двигал конвейер (task застревал в analysis) → развёл `check_analysis_approved` по `finished_agent` | ✅ Смержен, боевой прогон ✅ |
|
||||
|
||||
**Baseline тестов:** 210 passed + 9 pre-existing failed (test_webhooks.py, HMAC/401 — off-limits).
|
||||
|
||||
---
|
||||
|
||||
## Инфраструктура на mva154 (82.22.50.71)
|
||||
|
||||
Reference in New Issue
Block a user