auto-sync: 2026-06-03 11:00:01

This commit is contained in:
Stream
2026-06-03 11:00:01 +03:00
parent e0123668be
commit 5944bd226d
2 changed files with 111 additions and 22 deletions

View File

@@ -2,29 +2,35 @@
---
## Plane per-agent authorship (Вариант A) — инфра ГОТОВА, код запущен (03.06 вечер)
## Plane per-agent authorship — ЗАВЕРШЕНО И ПОДТВЕРЖДЕНО (03.06)
**Задача Славы:** видеть в Plane КТО написал комментарий (агенты орка + Стрим), а не единый `mva154`. Выбран Вариант A (честные аккаунты), способ (b) — боты в БД.
### 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 self-hosted**, Docker (`plane-app-*`), БД `plane-app-plane-db-1`, креды `plane:plane`, db `plane`.
- Workspace `ag_proj` = `903e12e8-65c9-40a0-a7f6-0186f8af42d4`.
- **Ключевой факт:** автор комментария в Plane = владелец токена (`api_tokens.user_id`), НЕ label. Поэтому нужен отдельный user на агента.
- Было: 2 токена (`orchestrator`, `analyst-agent`) — ОБА на mva154 → всё под mva154.
- **Создано 7 сервис-ботов** (`is_bot=t`, role 15 member в ag_proj), email `<name>@orch.local`, каждый со своим 60-симв сервисным токеном:
- 🧠 orch-analyst, 🏗️ orch-architect, 💻 orch-developer, 🔍 orch-reviewer, 🧪 orch-tester, 🚀 orch-deployer, 🌊 orch-stream (я)
- SQL-скрипт: `/tmp/plane_bots.sql` на сервере (идемпотентный, транзакция, ON CONFLICT). Потребовал `CREATE EXTENSION pgcrypto` (gen_random_bytes).
- **Бэкап БД перед записью:** `/home/slin/plane-identity-backup-1780472581.sql` (users+workspace_members+api_tokens).
- Токен Analyst-бота проверен живым GET → HTTP 200, видит 4 проекта. Авторство работает.
- **Токены в `.env`** (merge-append, блок «M-6.5 Plane per-agent»): `ORCH_PLANE_BOT_ANALYST/ARCHITECT/DEVELOPER/REVIEWER/TESTER/DEPLOYER/STREAM`. Бэкап `.env.bak-<ts>`.
### 🔑 ГЛАВНЫЙ УРОК: 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.
### Код (Dev, ветка `feature/plane-per-agent-author`, ТЗ `DEV_TASK_PLANE_PER_AGENT_AUTHOR.md`):
- `config.py`: 7 полей bot-токенов.
- `plane_sync.py`: `PLANE_BOT_TOKENS` map + `_headers_for(author)` (fallback на общий токен если роль пуста/токен пуст). `add_comment(..., author=None)` — POST под токеном агента. GET/PATCH НЕ трогать (под общим токеном).
- Точки вызова прокидывают author по роли стадии: stage_engine (284/305/316 analyst, 369 tester, 409 architect), launcher:472 (текущий агент), webhooks/plane (212/255 analyst, 267 целевая стадия), plane_sync stage-уведомления (255 🔄 → stream, 267 ✅ → deployer). Неочевидное → `stream`.
- Baseline 158 passed. Тесты `tests/test_plane_author.py`.
- ⚠️ Мерж — Стрим после живой проверки + реальный тест-комментарий от каждого бота в Plane.
### ✅ БОЕВАЯ ПРОВЕРКА ПРОЙДЕНА (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 живых).
### Закрыто разведкой (НЕ требовало работы):
- Хук enduro-trails swap — УЖЕ применён (live md5 == кандидат `2b60c65b...`). Бэкап `.bak-1780468526` цел.
- `.env` Gitea-токен — УЖЕ синхронизирован (40 симв == контейнер). Заметка Dev устарела.
### ⚠️ ГРАБЛЯ 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`. Надёжно, без экранирования.
### 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 проекта — авто-добавление ботов.)
### ИТОГ дня 03.06
Закрыто: ORCH-1..7, L1L2L3, M-6, Plane per-agent authorship (Вариант A, боты). Всё в проде, проверено вживую.
Открыто (НЕ срочно): авто-добавление ботов в project_members при новом проекте.