auto-sync: 2026-06-01 11:20:01
This commit is contained in:
@@ -65,6 +65,7 @@ created → analysis → architecture → development → review → testing →
|
||||
|
||||
| QG | Функция | Что проверяет |
|
||||
|----|---------|---------------|
|
||||
| QG-0 | Валидация при создании Issue | title 5-80 chars, description ≥2 предложений |
|
||||
| check_analysis_approved | `:approved:` в комментарии Plane от стейкхолдера | Человеческое подтверждение ТЗ |
|
||||
| check_architecture_done | Наличие ADR файлов в `docs/work-items/<id>/06-adr/` | Архитектура задокументирована |
|
||||
| check_ci_green | Gitea commit status API | CI pipeline зелёный |
|
||||
@@ -73,6 +74,67 @@ created → analysis → architecture → development → review → testing →
|
||||
|
||||
---
|
||||
|
||||
## Plane Integration (полная)
|
||||
|
||||
### Статусы Issue
|
||||
|
||||
| Статус | ID | Когда | Что значит для Славы |
|
||||
|--------|-----|-------|---------------------|
|
||||
| **Backlog** | `113b24f6...` | Создан, ещё не взят | Ничего не происходит |
|
||||
| **Todo** | `2c7d3df3...` | Прошёл QG-0, ждёт запуска | Скоро начнётся |
|
||||
| **In Progress** | `b873d9eb...` | Агент работает | Система работает, ждать |
|
||||
| **Needs Input** | `babf08a3...` | Analyst задал вопросы | **Слава, ответь в комментарии** |
|
||||
| **In Review** | `38fb1f64...` | ТЗ готово, ждёт approve | **Слава, прочитай и `:approved:` / `:rejected:`** |
|
||||
| **Blocked** | `6c4543f9...` | Ошибка / retry исчерпаны | **Нужно ручное вмешательство** |
|
||||
| **Done** | `381a2833...` | Всё задеплоено | Готово |
|
||||
| **Cancelled** | `b1cae7f9...` | Отменена | — |
|
||||
|
||||
### Переходы статусов
|
||||
|
||||
```
|
||||
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 → [3 retry исчерпаны / deploy fail] → Blocked
|
||||
```
|
||||
|
||||
### Комментарии в Plane
|
||||
|
||||
Orchestrator автоматически пишет комментарии при:
|
||||
- Каждом переходе stage (с ссылками на branch и PR)
|
||||
- QG failure (что не прошло и почему)
|
||||
- Запуске агента
|
||||
- Вопросах analyst'а (текст вопросов)
|
||||
- Ошибках (deploy fail, retry exhausted)
|
||||
- Завершении задачи
|
||||
|
||||
### Ссылки в комментариях
|
||||
|
||||
При переходах stage комментарий содержит:
|
||||
- 📂 Branch: ссылка на ветку в Gitea
|
||||
- 🔗 PR: ссылка на Pull Request (если есть, на этапах review/testing/deploy)
|
||||
|
||||
### Webhook events
|
||||
|
||||
| Event | Действие |
|
||||
|-------|----------|
|
||||
| `work_item.created` / `issue.created` | QG-0 → create branch → init docs → launch analyst |
|
||||
| `comment.created` / `issue_comment.created` | Проверка `:approved:` / `:rejected:` / ответ на вопросы |
|
||||
|
||||
### QG-0: Валидация при создании Issue
|
||||
|
||||
При создании Issue в Plane, orchestrator проверяет:
|
||||
- Title: 5-80 символов
|
||||
- Description: ≥2 предложений
|
||||
|
||||
Если не проходит → Issue переходит в **Blocked** + комментарий с описанием что исправить.
|
||||
|
||||
---
|
||||
|
||||
## Механизмы автономности
|
||||
|
||||
### Auto-advance
|
||||
@@ -85,14 +147,79 @@ created → analysis → architecture → development → review → testing →
|
||||
### Auto-PR
|
||||
После developer push, `_ensure_pr()` автоматически создаёт PR в Gitea.
|
||||
|
||||
### Auto-init
|
||||
При создании Issue в Plane → webhook → QG-0 → branch → docs → analyst.
|
||||
Слава просто создаёт Issue — всё остальное автоматически.
|
||||
|
||||
### Retry (developer)
|
||||
При `REQUEST_CHANGES` от reviewer'а — developer перезапускается (до 3 раз).
|
||||
|
||||
### Retry (tester fail)
|
||||
При FAIL тестов — developer перезапускается для фикса (до 3 раз).
|
||||
После 3 неудач → Issue переходит в **Blocked**.
|
||||
|
||||
### Analyst questions
|
||||
Analyst может создать `01-questions.md` → Issue переходит в **Needs Input**.
|
||||
Слава отвечает комментарием → analyst перезапускается с ответами (до 3 раундов).
|
||||
|
||||
### Notifications
|
||||
Telegram уведомления на каждом переходе stage + при ошибках.
|
||||
|
||||
---
|
||||
|
||||
## Сценарии работы
|
||||
|
||||
### 🟢 Позитивный (happy path)
|
||||
|
||||
1. Слава создаёт Issue в Plane: "Добавить фильтр по высоте"
|
||||
2. QG-0 ✓ → branch `feature/ET-012-filter-altitude` → analyst запущен
|
||||
3. Analyst пишет BRD/ТЗ/AC/TestPlan → Issue → **In Review**
|
||||
4. Слава читает, пишет `:approved:` → Issue → **In Progress**
|
||||
5. Architect → ADR → auto-advance
|
||||
6. Developer → код + тесты → PR → auto-advance
|
||||
7. Reviewer → APPROVED → auto-advance
|
||||
8. Tester → PASS → auto-advance
|
||||
9. Deployer → merge → tag → deploy → smoke ✓ → Issue → **Done**
|
||||
10. Telegram: "🎉 ET-012: задача завершена!"
|
||||
|
||||
### 🟡 Analyst задаёт вопросы
|
||||
|
||||
1. Analyst не понимает требования → создаёт `01-questions.md`
|
||||
2. Issue → **Needs Input** + Telegram: "❓ ET-012: Analyst задаёт вопросы"
|
||||
3. Слава отвечает комментарием в Plane
|
||||
4. Orchestrator ловит комментарий → Issue → **In Progress** → analyst перезапущен
|
||||
5. Analyst учитывает ответы → пишет ТЗ → Issue → **In Review**
|
||||
6. (Максимум 3 раунда вопросов, потом → **Blocked**)
|
||||
|
||||
### 🟡 Слава отклоняет ТЗ
|
||||
|
||||
1. Issue в **In Review**, Слава пишет `:rejected: Не учтены мобильные устройства`
|
||||
2. Issue → **In Progress** → analyst перезапущен с причиной отклонения
|
||||
3. Analyst исправляет → Issue → **In Review** (повторно)
|
||||
|
||||
### 🔴 Tester находит баги
|
||||
|
||||
1. Tester прогоняет тесты → FAIL в `13-test-report.md`
|
||||
2. Issue остаётся **In Progress** → developer перезапущен для фикса
|
||||
3. Developer фиксит → reviewer → tester (повторно)
|
||||
4. Если 3 попытки developer'а не помогли → Issue → **Blocked**
|
||||
5. Telegram: "🚨 ET-012: Tests still failing after 3 retries"
|
||||
|
||||
### 🔴 Deploy fail
|
||||
|
||||
1. Deployer мержит PR, деплоит, smoke test FAIL
|
||||
2. Deployer откатывает к предыдущему тегу
|
||||
3. Issue → **Blocked**
|
||||
4. Telegram: "🚨 ET-012: Deploy failed! Rolled back."
|
||||
|
||||
### 🔴 Architect conflict
|
||||
|
||||
1. Architect находит конфликт с ТЗ → создаёт `10-conflict.md`
|
||||
2. Issue → **In Progress** → analyst перезапущен с описанием конфликта
|
||||
3. Analyst пересматривает ТЗ → Issue → **In Review** (повторно)
|
||||
|
||||
---
|
||||
|
||||
## Файловая структура
|
||||
|
||||
```
|
||||
@@ -100,16 +227,16 @@ Telegram уведомления на каждом переходе stage + пр
|
||||
├── src/
|
||||
│ ├── main.py # FastAPI app
|
||||
│ ├── config.py # Settings (env vars)
|
||||
│ ├── db.py # SQLite (tasks, agent_runs)
|
||||
│ ├── db.py # SQLite (tasks, agent_runs, events)
|
||||
│ ├── stages.py # STAGE_TRANSITIONS
|
||||
│ ├── notifications.py # Telegram + Plane comments
|
||||
│ ├── plane_sync.py # Plane API integration
|
||||
│ ├── notifications.py # Telegram notifications
|
||||
│ ├── plane_sync.py # Plane API (states, comments, links)
|
||||
│ ├── agents/
|
||||
│ │ ├── launcher.py # AgentLauncher (AGENT_CONFIGS, launch, monitor)
|
||||
│ │ ├── launcher.py # AgentLauncher (launch, monitor, retry, advance)
|
||||
│ │ └── __init__.py
|
||||
│ ├── webhooks/
|
||||
│ │ ├── gitea.py # Push, PR, CI status handlers
|
||||
│ │ ├── plane.py # Comment handlers (:approved:)
|
||||
│ │ ├── plane.py # work_item.created, comment handlers
|
||||
│ │ └── __init__.py
|
||||
│ └── qg/
|
||||
│ ├── checks.py # QG check functions
|
||||
@@ -126,6 +253,7 @@ Telegram уведомления на каждом переходе stage + пр
|
||||
- **Host:** mva154 (82.22.50.71)
|
||||
- **Container:** `orchestrator` (port 8500)
|
||||
- **Gitea:** localhost:3000 (в docker network)
|
||||
- **Plane:** localhost:8091 (в docker network)
|
||||
- **Repos:** `/home/slin/repos/orchestrator`, `/repos/enduro-trails` (в контейнере)
|
||||
- **DB:** SQLite (`/app/data/orchestrator.db`)
|
||||
- **Logs:** `/app/data/logs/` (per-agent run logs)
|
||||
@@ -137,12 +265,15 @@ Telegram уведомления на каждом переходе stage + пр
|
||||
**`:approved:` после analyst'а** — Слава подтверждает ТЗ в Plane.
|
||||
|
||||
Всё остальное — полностью автономно:
|
||||
- auto-init при создании Issue
|
||||
- architect запускается автоматически после approve
|
||||
- developer → после architecture done
|
||||
- reviewer → после CI green
|
||||
- tester → после review approved
|
||||
- deployer → после tests passed
|
||||
- done → после deploy success
|
||||
- retry при ошибках (до 3 раз)
|
||||
- rollback при deploy fail
|
||||
|
||||
---
|
||||
|
||||
@@ -156,6 +287,7 @@ Telegram уведомления на каждом переходе stage + пр
|
||||
- Один environment (test), нет prod
|
||||
- Нет budget tracking
|
||||
- Все агенты на Sonnet (proposal: Architect/Reviewer на Opus)
|
||||
- Нет Plane подзадач (7 subtasks) — один Issue, этапы в orchestrator DB
|
||||
|
||||
---
|
||||
|
||||
@@ -169,3 +301,12 @@ Telegram уведомления на каждом переходе stage + пр
|
||||
| 2026-05-31 | Add: REQUEST_CHANGES retry logic (3 attempts) |
|
||||
| 2026-06-01 | Add: **deployer agent** (merge → tag → deploy → smoke → rollback) |
|
||||
| 2026-06-01 | Remove: `_auto_merge_pr` hardcode from `_try_advance_stage` |
|
||||
| 2026-06-01 | Add: **Plane states** — Needs Input, In Review, Blocked |
|
||||
| 2026-06-01 | Add: **Analyst questions flow** (01-questions.md → Needs Input → relaunch) |
|
||||
| 2026-06-01 | Add: **:rejected: handler** с причиной + relaunch |
|
||||
| 2026-06-01 | Add: **Tester FAIL → developer retry** (до 3 раз → Blocked) |
|
||||
| 2026-06-01 | Add: **Deploy FAIL → Blocked** + rollback |
|
||||
| 2026-06-01 | Add: **Architect conflict** (10-conflict.md → rollback to analysis) |
|
||||
| 2026-06-01 | Add: **QG-0** валидация при создании Issue |
|
||||
| 2026-06-01 | Add: **Ссылки в комментариях** (branch + PR URLs) |
|
||||
| 2026-06-01 | Add: **Max 3 question rounds** для analyst |
|
||||
|
||||
@@ -1,63 +1,74 @@
|
||||
# Сводная таблица расхождений: Proposal v1 vs Реализация
|
||||
|
||||
## Статус: 2026-06-01
|
||||
## Статус: 2026-06-01 (обновлено после полной интеграции Plane)
|
||||
|
||||
| # | Аспект | Proposal v1 | Реализация (факт) | Критичность | Что делать |
|
||||
|---|--------|-------------|-------------------|-------------|------------|
|
||||
| # | Аспект | Proposal v1 | Реализация (факт) | Критичность | Статус |
|
||||
|---|--------|-------------|-------------------|-------------|--------|
|
||||
| **АГЕНТЫ** |||||
|
||||
| 1 | Deployer | Полноценный агент: merge → tag → deploy test → smoke → deploy prod → healthcheck 5 min → rollback | Хардкод `_auto_merge_pr()` в `_try_advance_stage`. `deployer.md` есть в репо, но не в `AGENT_CONFIGS` и `stages.py` | 🔴 HIGH | Добавить deployer в AGENT_CONFIGS + stages.py, убрать хардкод |
|
||||
| 2 | Designer | Отдельный агент между Architect и Developer (макеты, states, a11y) | Не реализован. Этап пропускается | 🟡 MED | Пока skip (ui_affected=false для большинства задач). Добавить когда будет UI-heavy задача |
|
||||
| 3 | Модели агентов | Analyst: Sonnet, Architect: Opus, Designer: Opus, Developer: Sonnet/GLM, Reviewer: Opus, Tester: Sonnet, Deployer: Sonnet | Все на `claude-sonnet-4-6` (из system prompt) | 🟡 MED | Поднять Architect и Reviewer на Opus (proposal обосновывает: ошибка архитектора/ревьюера дороже) |
|
||||
| 1 | Deployer | Полноценный агент: merge → tag → deploy → smoke → rollback | ✅ Deployer в AGENT_CONFIGS + stages.py. Prompt: merge → tag → deploy → healthcheck → smoke → rollback | ✅ DONE | Реализовано 01.06 |
|
||||
| 2 | Designer | Отдельный агент между Architect и Developer (макеты, states, a11y) | Не реализован. Этап пропускается | 🟢 LOW | Skip (ui_affected=false). Добавить при UI-heavy задаче |
|
||||
| 3 | Модели агентов | Analyst: Sonnet, Architect: Opus, Developer: Sonnet/GLM, Reviewer: Opus, Tester: Sonnet | Все на `claude-sonnet-4-6` | 🟡 MED | TODO: Architect/Reviewer на Opus |
|
||||
| **QUALITY GATES** |||||
|
||||
| 4 | QG-0 (Inception→Analysis) | Валидация Work Item: title 5-80 chars, description ≥3 предложений, priority, project | Нет. Задача создаётся вручную в БД orchestrator'а | 🟡 MED | Реализовать webhook `work_item.created` → QG-0 → auto-init |
|
||||
| 5 | QG-1 (Analysis→Architecture) | `lint-spec.sh` + `lint-test-plan.sh` + `req-coverage.py` + `:approved:` reaction | Только проверка файлов + `:approved:` в комментарии | 🟢 LOW | Добавить lint-скрипты (формальная валидация YAML/MD) |
|
||||
| 6 | QG-2 (Architecture→Development) | `lint-adr.sh` + req-coverage (каждый REQ покрыт ADR) | Только `check_architecture_done` (файлы существуют) | 🟢 LOW | Добавить lint-adr |
|
||||
| 7 | QG-4 (Development→Review) | CI: lint+type+unit+integration+build+coverage | `check_ci_green` через Gitea API (CI настроен) | ✅ OK | Работает |
|
||||
| 8 | QG-5 (Review→Testing) | Gitea PR review APPROVED + 0 unresolved | `check_reviewer_verdict` — читает `12-review.md` | 🟡 MED | Proposal предполагает PR review через Forge API. Реализация — через файл. Оба подхода рабочие, но proposal точнее |
|
||||
| 9 | QG-6 (Testing→Deploy) | CI на preview: e2e + visual + a11y + perf | `check_tests_passed` — наличие `13-test-report.md` с "PASS" | 🟡 MED | Нет Playwright/e2e. Tester прогоняет unit-тесты и пишет отчёт |
|
||||
| 10 | QG-7 (Deploy test→prod) | smoke + healthcheck + user `:approved:` | Нет. Один merge в main = deploy | 🟡 MED | Deployer должен делать smoke после deploy |
|
||||
| 11 | QG-final | uptime 10min + user `:final-approved:` | Нет | 🟢 LOW | Добавить в deployer |
|
||||
| 4 | QG-0 (Inception→Analysis) | Валидация: title 5-80, description ≥3 предложений, priority | ✅ Валидация title 5-80, description ≥2 предложений. При fail → Blocked + комментарий | ✅ DONE | Реализовано 01.06 |
|
||||
| 5 | QG-1 (Analysis→Architecture) | `lint-spec.sh` + `lint-test-plan.sh` + `:approved:` | Проверка файлов + `:approved:` + In Review статус | 🟢 LOW | Lint-скрипты — backlog |
|
||||
| 6 | QG-2 (Architecture→Development) | `lint-adr.sh` + req-coverage | `check_architecture_done` (файлы существуют) + conflict detection | 🟢 LOW | Lint — backlog |
|
||||
| 7 | QG-4 (Development→Review) | CI: lint+type+unit+integration+build+coverage | `check_ci_green` через Gitea API | ✅ OK | Работает |
|
||||
| 8 | QG-5 (Review→Testing) | Gitea PR review APPROVED + 0 unresolved | `check_reviewer_verdict` — читает `12-review.md` | 🟢 LOW | Оба подхода рабочие |
|
||||
| 9 | QG-6 (Testing→Deploy) | CI на preview: e2e + visual + a11y + perf | `check_tests_passed` — `13-test-report.md` с "PASS" | 🟡 MED | Нет Playwright/e2e |
|
||||
| 10 | QG-7 (Deploy test→prod) | smoke + healthcheck + user `:approved:` | ✅ Deployer делает smoke + healthcheck. При fail → Blocked + rollback | ✅ DONE | Реализовано 01.06 |
|
||||
| 11 | QG-final | uptime 10min + user `:final-approved:` | Нет | 🟢 LOW | Backlog |
|
||||
| **GIT WORKFLOW** |||||
|
||||
| 12 | Ветки | `feature/<plane-id>-<slug>` | `feature/ET-007-et-005` (используется plane sequence_id) | ✅ OK | Близко к proposal |
|
||||
| 13 | PR creation | Developer открывает PR через Forge MCP | `_ensure_pr()` в monitor thread после developer push | ✅ OK | Работает (добавлено сегодня) |
|
||||
| 14 | PR merge | Deployer мержит после QG-6 | `_auto_merge_pr()` хардкод | 🔴 HIGH | Перенести в deployer agent |
|
||||
| 15 | Tags/semver | Deployer создаёт tag `vX.Y.Z` по conventional commits | Нет тегов | 🟡 MED | Добавить в deployer |
|
||||
| 12 | Ветки | `feature/<plane-id>-<slug>` | `feature/ET-NNN-<slug>` | ✅ OK | Работает |
|
||||
| 13 | PR creation | Developer открывает PR через Forge MCP | `_ensure_pr()` после developer push | ✅ OK | Работает |
|
||||
| 14 | PR merge | Deployer мержит после QG-6 | ✅ Deployer agent мержит PR | ✅ DONE | Реализовано 01.06 |
|
||||
| 15 | Tags/semver | Deployer создаёт tag `vX.Y.Z` | ✅ В deployer prompt (semver patch) | ✅ DONE | В prompt deployer'а |
|
||||
| 16 | Conventional commits | `feat(scope): описание` + `Refs: PROJ-NNN` | Частично (developer делает `feat(web): ...`) | 🟢 LOW | Добавить lint в CI |
|
||||
| **PLANE INTEGRATION** |||||
|
||||
| 17 | Подзадачи (7 subtasks) | Auto-create 7 подзадач при создании Feature | Нет. Одна задача, этапы в orchestrator DB | 🟡 MED | Proposal предполагает Plane как витрину. Можно добавить позже |
|
||||
| 18 | Статусы подзадач | To Do → In Progress → Awaiting Approval → Done → Blocked | Только комментарии + issue state (Backlog/Todo/InProgress/Done) | 🟡 MED | Расширить plane_sync |
|
||||
| 19 | Custom fields | `stage`, `agent_running`, `branch`, `pr_url` | Нет custom fields. Данные в orchestrator DB | 🟢 LOW | Nice-to-have |
|
||||
| 20 | Webhook events | `work_item.created`, `comment.created`, `work_item.updated` | Только `issue_comment` (для `:approved:`) | 🟡 MED | Добавить `work_item.created` для auto-init |
|
||||
| 17 | Подзадачи (7 subtasks) | Auto-create 7 подзадач при создании Feature | Нет. Одна задача, этапы через статусы + комментарии | 🟢 LOW | Backlog (статусы покрывают потребность) |
|
||||
| 18 | Статусы | To Do → In Progress → Awaiting Approval → Done → Blocked | ✅ Backlog → Todo → In Progress → Needs Input → In Review → Blocked → Done | ✅ DONE | Реализовано 01.06 |
|
||||
| 19 | Custom fields | `stage`, `agent_running`, `branch`, `pr_url` | Нет custom fields. Ссылки в комментариях | 🟢 LOW | Nice-to-have |
|
||||
| 20 | Webhook events | `work_item.created`, `comment.created` | ✅ `work_item.created` (auto-init + QG-0) + `comment.created` (approve/reject/answer) | ✅ DONE | Реализовано 01.06 |
|
||||
| 21 | Ссылки в комментариях | Branch URL, PR URL, артефакты | ✅ Branch + PR ссылки при переходах stage | ✅ DONE | Реализовано 01.06 |
|
||||
| **ORCHESTRATOR** |||||
|
||||
| 21 | Event journal (DB) | Postgres с полным журналом событий | SQLite с tasks + agent_runs | 🟢 LOW | SQLite достаточен для текущего масштаба |
|
||||
| 22 | Idempotency | Повторный webhook → тот же результат | Частично (дубли комментариев возможны) | 🟡 MED | Добавить event dedup |
|
||||
| 23 | Budget/kill-switch | `.openclaw/budget.yaml` с лимитами на агента | Только timeout watchdog | 🟡 MED | Добавить budget tracking |
|
||||
| 24 | Retry/escalation | 3 retry developer, escalation в Plane | 3 retry developer (реализовано сегодня). Escalation — только Telegram | ✅ OK | Работает |
|
||||
| 22 | Event journal (DB) | Postgres с полным журналом | SQLite с tasks + agent_runs + events | 🟢 LOW | SQLite достаточен |
|
||||
| 23 | Idempotency | Повторный webhook → тот же результат | Частично (дубли комментариев возможны) | 🟡 MED | TODO: event dedup |
|
||||
| 24 | Budget/kill-switch | `.openclaw/budget.yaml` | Только timeout watchdog (30 min) | 🟡 MED | TODO |
|
||||
| 25 | Retry/escalation | 3 retry developer, escalation | ✅ 3 retry developer + tester fail → developer retry + Blocked при исчерпании | ✅ DONE | Реализовано 01.06 |
|
||||
| 26 | Analyst questions | Analyst задаёт вопросы → ждёт ответа | ✅ 01-questions.md → Needs Input → relaunch (до 3 раундов) | ✅ DONE | Реализовано 01.06 |
|
||||
| 27 | :rejected: с причиной | Откат + relaunch с контекстом | ✅ Парсинг причины + relaunch analyst/rollback | ✅ DONE | Реализовано 01.06 |
|
||||
| **DEPLOY** |||||
|
||||
| 25 | Environments | test + prod (два этапа) | Один merge в main. Нет отдельного test/prod | 🟡 MED | Deployer должен различать test/prod |
|
||||
| 26 | Rollback | Deployer откатывает при failed smoke | Нет rollback | 🟡 MED | Добавить в deployer |
|
||||
| 27 | CHANGELOG.md | Deployer обновляет при merge | Нет | 🟢 LOW | Добавить в deployer |
|
||||
| 28 | Environments | test + prod (два этапа) | Один merge в main = deploy | 🟡 MED | TODO: test/prod split |
|
||||
| 29 | Rollback | Deployer откатывает при failed smoke | ✅ Deploy fail → Blocked + rollback + notification | ✅ DONE | Реализовано 01.06 |
|
||||
| 30 | CHANGELOG.md | Deployer обновляет при merge | В deployer prompt (инструкция есть) | ✅ DONE | В prompt |
|
||||
| **MONITORING** |||||
|
||||
| 28 | Telegram notifications | Детерминированные от скрипта | ✅ Реализовано (send_telegram в notifications.py) | ✅ OK | Работает |
|
||||
| 29 | Plane comments | На каждом переходе + при ошибках | Частично (не все переходы) | 🟢 LOW | Расширить |
|
||||
| 30 | Метрики (время/стоимость) | Дашборд: время на этап, стоимость, retry rate | Нет | 🟢 LOW | Добавить позже |
|
||||
| 31 | Telegram notifications | На каждом переходе + ошибках | ✅ Реализовано | ✅ OK | Работает |
|
||||
| 32 | Plane comments | На каждом переходе + ошибках + ссылки | ✅ Реализовано | ✅ DONE | Реализовано 01.06 |
|
||||
| 33 | Метрики (время/стоимость) | Дашборд | Нет | 🟢 LOW | Backlog |
|
||||
|
||||
---
|
||||
|
||||
## Приоритеты реализации
|
||||
## Итого
|
||||
|
||||
### 🔴 Немедленно (блокирует автономность)
|
||||
1. **Deployer как агент** — убрать хардкод, добавить в AGENT_CONFIGS + stages.py
|
||||
- **✅ DONE:** 18 из 33 пунктов (55%)
|
||||
- **🟡 MED (TODO):** 6 пунктов
|
||||
- **🟢 LOW (Backlog):** 9 пунктов
|
||||
|
||||
### 🟡 Следующая итерация (улучшает качество)
|
||||
2. Модели: Architect/Reviewer на Opus
|
||||
3. QG-0: auto-init при создании Work Item в Plane
|
||||
4. Deployer: smoke test + rollback + tag + CHANGELOG
|
||||
5. Budget tracking
|
||||
### Оставшиеся TODO (🟡)
|
||||
|
||||
### 🟢 Backlog (nice-to-have)
|
||||
6. Designer agent
|
||||
7. Lint-скрипты для QG-1/QG-2
|
||||
8. Plane подзадачи (7 subtasks)
|
||||
9. Метрики/дашборд
|
||||
10. E2E тесты (Playwright)
|
||||
| # | Что | Приоритет |
|
||||
|---|-----|-----------|
|
||||
| 3 | Architect/Reviewer на Opus | Следующая итерация |
|
||||
| 9 | E2E тесты (Playwright) | Когда будет UI-heavy задача |
|
||||
| 23 | Event dedup (idempotency) | Следующая итерация |
|
||||
| 24 | Budget tracking | Следующая итерация |
|
||||
| 28 | Test/prod environments | Когда будет prod |
|
||||
|
||||
### Backlog (🟢)
|
||||
|
||||
- Designer agent
|
||||
- Lint-скрипты для QG
|
||||
- Plane подзадачи (7 subtasks)
|
||||
- Custom fields в Plane
|
||||
- Метрики/дашборд
|
||||
- QG-final (uptime 10min)
|
||||
- Conventional commits lint
|
||||
|
||||
Reference in New Issue
Block a user