auto-sync: 2026-06-03 18:10:01

This commit is contained in:
Stream
2026-06-03 18:10:01 +03:00
parent 9a2484d376
commit 69b0e323b8
3 changed files with 183 additions and 26 deletions

View File

@@ -2,35 +2,38 @@
---
## Plane per-agent authorship — ЗАВЕРШЕНО И ПОДТВЕРЖДЕНО (03.06)
## Конвейер UX — статусная модель + токены (03.06 день, в работе)
### PR #9 `e9fd3052` ЗАМЕРЖЕН + прод пересобран
- Код: `config.py` (7 bot-полей), `plane_sync.py` (`PLANE_BOT_TOKENS`, `STAGE_AUTHORS`, `_headers_for(author)` fallback, `add_comment(author=)` POST под токеном бота), точки вызова прокидывают author. GET/PATCH под общим токеном (не тронуты). 166 passed (158+8), 9 baseline.
- ⚠️ Config-патч ОБЯЗАТЕЛЕН: образ уже содержит `ORCH_PLANE_BOT_*` env → без полей в config pydantic падает `extra_forbidden`. Прод поднялся → патч сработал.
### Решения Славы по статусной модели (ПОДТВЕРЖДЕНЫ):
- **Бэклог в Plane.** Задача лежит в Backlog/Todo/Triage пока Слава не переведёт в **In Progress** → только это запускает конвейер (analyst). Сейчас триггер = work_item.created (любой тикет сразу стартует) — НАДО починить.
- **Вердикт статусами (вариант B):** статус **Approved** = advance, **Rejected** = rollback. Комменты `:approved:`/`:rejected:` ОСТАВИТЬ параллельно. Причину reject Слава пишет комментом.
- **Стадии видимы на доске:** architecture/development/review/testing — отдельными статусами, не скрыты в In Progress.
- **Расход токенов по агентам:** показывать (A) в комменте каждого агента + (B) итог-сводка от Deployer.
### 🔑 ГЛАВНЫЙ УРОК: 403 → project_members
- Боты были в **workspace_members**, но комментить можно только **project_members**. POST коммента давал **403 Forbidden** (аутентификация ок, прав нет).
- Фикс: добавила 7 ботов в `project_members` проекта `7a79f0a9-...` (role 15, member). Бэкап `plane-projmembers-backup-*`.
- ⚠️ NOT NULL `member_id` — без него INSERT падал (транзакция откатывалась молча). Правильный INSERT: id, role, **member_id**, project_id, workspace_id, view_props/default_props/preferences='{}', sort_order=65535, is_active, created_at, updated_at.
### Механика конвейера (по факту кода, для справки):
- Все 6 агентов работают над ОДНОЙ задачей = 1 тикет Plane = 1 feature-ветка, комментят в неё (теперь под своими именами).
- Статус сейчас меняется только: in_review (analyst ждёт approve), needs_input (вопросы), blocked, in_progress, done. Стадии architecture/dev/review/testing невидимы.
- 2 ручных гейта: analyst→ждёт :approved: (In Review); reviewer→:approved:. Остальное едет автоматически.
- Needs Input: analyst пишет `01-questions.md`, статус Needs Input, ждёт. Слава отвечает обычным комментом → analyst перезапуск. Лимит 3 раунда → Blocked + Telegram-алерт.
- Агенты = **Claude CLI** (`/opt/claude-code/bin/claude.exe --print`), вывод в лог. Версия 2.1.142.
### ✅ БОЕВАЯ ПРОВЕРКА ПРОЙДЕНА (proof из БД)
- Каждый из 7 ботов запостил коммент на живую ET-009 (`64e98247-...`) → **HTTP 201**.
- `issue_comments JOIN users ON actor_id` показал авторов: 🧠 Analyst / 🏗️ Architect / 💻 Developer / 🔍 Reviewer / 🧪 Tester / 🚀 Deployer / 🌊 Стрим — НЕ mva154.
- Тестовые комменты убраны (soft-delete `deleted_at`, UPDATE 7 → 0 живых).
### ИНФРА сделана Стримом (БД Plane, бэкап states `plane-states-backup-*`):
6 новых статусов в проекте enduro (`7a79f0a9-...`), группа started, в правильном порядке доски:
```
architecture=3020bbb7-6122-4663-930c-0315ba8dfa3d development=9920609b-f140-4e46-ab95-89acda8412c8
review=ba0d802c-5218-41d4-ab43-978b0ea123ed testing=7855d807-b1bf-42ef-8dae-6cde0df92d02
approved=a519a341-dada-4a91-8910-7604f82b79c5 rejected=ba958f3c-5db5-461d-8f82-89425e413b97
```
### ⚠️ ГРАБЛЯ shell/psql (потеряла время — на будущее)
- heredoc через `ssh '...'` с вложенными кавычками/скобками в python/SQL — постоянно ломается (глотает вывод, `(` unexpected, кавычки съедаются).
- psql `-v var=...` без кавычек = идентификатор (column "font" does not exist).
- `scp` в контейнере НЕТ.
- **РАБОЧИЙ способ передать скрипт на сервер:** `write` локально → `base64 -w0``echo '<b64>' | base64 -d > /tmp/x` на сервере → `docker cp``psql -f`. Надёжно, без экранирования.
### CLI usage подтверждён вживую (для фичи токенов):
`claude --output-format json` отдаёт: `total_cost_usd`, `usage.{input_tokens,output_tokens,cache_read_input_tokens,cache_creation_input_tokens}`, `modelUsage`, `num_turns`, `duration_ms`. Сейчас запуск plain-text (`--print` без формата) → usage НЕ собирается. agent_runs (id,task_id,agent,started/finished,exit_code,output_path) — НЕТ полей токенов, надо ALTER.
### Plane identity — справочник
- БД Plane: контейнер `plane-app-plane-db-1`, user `plane`, пароль = `docker exec plane-app-api-1 printenv POSTGRES_PASSWORD`.
- Workspace `ag_proj` = `903e12e8-65c9-40a0-a7f6-0186f8af42d4`. Главный проект enduro = `7a79f0a9-5278-49cd-9007-9a338f238f9c`.
- 7 ботов: email `<role>@orch.local`, `is_bot=t`, в workspace_members(role 15) И project_members(role 15). Токены 60-симв в `.env` `ORCH_PLANE_BOT_<ROLE>`.
- Автор коммента = `issue_comments.actor_id` = владелец токена. Роли: ANALYST/ARCHITECT/DEVELOPER/REVIEWER/TESTER/DEPLOYER/STREAM.
- ⚠️ При создании НОВЫХ проектов в Plane — ботов надо добавлять в project_members нового проекта, иначе 403. (Кандидат на автоматизацию: при ORCH-6 resolve проекта — авто-добавление ботов.)
### Код — Dev, ветка `feature/pipeline-ux`, ТЗ `DEV_TASK_PIPELINE_UX.md` (4 фичи):
1. Старт по статусу (in_progress), не по created. Идемпотентно (задача уже есть → не дублить).
2. Вердикт-статусы Approved/Rejected (+ комменты живы).
3. Видимость стадий: PLANE_STATES += 6 UUID, set_issue по стадии (Needs Input/Blocked приоритетны).
4. Токены: `--output-format json`, ALTER agent_runs (+input/output/cache/cost), коммент агента + сводка Deployer.
- ⚠️ Статусы per-project — ОСТАВИТЬ TODO (ORCH-10 эпик), не переделывать резолв сейчас.
- Baseline 166 passed. Мерж — Стрим после живой проверки.
### ИТОГ дня 03.06
Закрыто: ORCH-1..7, L1L2L3, M-6, Plane per-agent authorship (Вариант A, боты). Всё в проде, проверено вживую.
Открыто (НЕ срочно): авто-добавление ботов в project_members при новом проекте.
### Recraft (попутно, 03.06): модель OpenRouter = `recraft/recraft-v4.1` (НЕ в каталоге /models, но работает). Дёргать chat/completions с `modalities:["image"]` (только image, без text — иначе 404). Сгенерила пляжные картинки Славе.