Files
wiki/memory/2026-06-03.md
2026-06-03 19:00:01 +03:00

59 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
## Конвейер UX — статусная модель + токены (03.06 день, в работе)
### Решения Славы по статусной модели (ПОДТВЕРЖДЕНЫ):
- **Бэклог в 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.
### Механика конвейера (по факту кода, для справки):
- Все 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.
### ИНФРА сделана Стримом (БД 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
```
### 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.
### Код — 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. Мерж — Стрим после живой проверки.
### Recraft (попутно, 03.06): модель OpenRouter = `recraft/recraft-v4.1` (НЕ в каталоге /models, но работает). Дёргать chat/completions с `modalities:["image"]` (только image, без text — иначе 404). Сгенерила пляжные картинки Славе.
---
## PR #10 СМЕРЖЕН в main (03.06, вечер) — конвейер UX
**Merge commit main = `4773137`.** Проверено вживую перед мержем (не на слово Dev):
- 5 коммитов на remote: `a4668c0` feat(plane) stage visibility+verdict UUIDs, `09b1c5e` feat(webhook) старт на In Progress, `38a741d` feat(webhook) вердикт Approved/Rejected (вариант B), `9a702a0` feat(metrics) токены/cost per-agent, `7fd6529` test(conftest) глушилка Telegram.
- **Прогон тестов сама: 190 passed, 9 failed.** Девять — pre-existing baseline (сравнила полную сюиту на main ДО ветки = те же 9). Regression = 0. Из девяти: 8 это 401-invalid-signature, 1 это `test_plane_approved` TypeError — ВСЕ падали и на main. ⚠️ Уточнение к прошлым заметкам: реальный baseline = 9 (не только 401-набор).
- **Telegram-утечка закрыта:** `tests/conftest.py` autouse-фикстура глушит `send_telegram` во всех тестах. Sentinel-проверка: 0 запросов в api.telegram.org за прогон. Покрыты модули: notifications (источник), stage_engine (module-level import — критичный), plane/launcher/queue_worker/main (local imports, raising=False). Источник шума «🔄 ET-100» = тест `test_webhook_dedup` гонялся на проде без мока.
### ⚠️ НЕ ЗАДЕПЛОЕНО — следующий шаг
Код в main, но **контейнер orchestrator крутит старую версию**. Чтобы 4 фичи заработали на проде — нужен деплой (рестарт контейнера с новым кодом + проверить идемпотентную миграцию agent_runs: +input_tokens/output_tokens/cache_read_tokens/cost_usd). Спросила Славу деплоить ли. Жду решения.
### После деплоя — боевой тест (план):
Завести задачу в Backlog → перевести в In Progress (должен стартовать analyst, НЕ на created) → провести по доске (видеть переезд по колонкам Architecture→…→Testing) → показать Славе токены живьём (коммент агента `💻 Developer · Nk in / Mk out · $X` + сводка Deployer). Боевой usage-тест на ветке уже дал `💻 Developer готов · 6 in / 15 out · $0.06`.
### Формат Plane-webhook на смену статуса (Dev нашёл по реальному payload):
`event="issue", action="updated"`, новый статус в `data.state.id`. Старт ловит переход в In Progress из бэклог-статуса. Идемпотентность: задача уже в БД tasks → не дублить/не перезапускать.