diff --git a/memory/2026-06-05.md b/memory/2026-06-05.md index 6f7e518..586238d 100644 --- a/memory/2026-06-05.md +++ b/memory/2026-06-05.md @@ -534,3 +534,50 @@ Dev (session orch9_docs_canon) отработал, я проверила не с - Прод: контейнер `orchestrator`, image `orchestrator-orchestrator`. SSH: `sshpass -p 'motoZ@yaz2010' ssh slin@82.22.50.71`. compose `/home/slin/repos/orchestrator/docker-compose.yml`. ### Эталон enduro для канона: `/home/slin/repos/enduro-trails/` — CLAUDE.md, docs/architecture/, .openclaw/agents/*.md (6 ролей). + + +--- + +## 🔧 ORCH-16 деплой + ORCH-39 (тесты/CI) — финал дня (05.06 вечер) + +### ORCH-16: done ≠ в проде (важное различие) +- ORCH-16 в Plane = `done`, НО фича в прод НЕ выкачена. deploy-staging прошёл (`staging_status: SUCCESS`, коммит `053ea3b` — только docs, merge staging-log в main). +- Фича-код `0663da6` (единый формат коммента + строка длительности) — только в ветке `feature/ORCH-016-plane`. **PR #34 ОТКРЫТ, не влит.** +- Прод на 8500 работает на СТАРОМ коде. Это правильный предохранитель self-hosting: орк не мержит/не ребилдит себя сам без ОК Славы. + +### Ревью PR #34 лично (вердикт) +- +3452/-112, 27 файлов. Боялась мусора за $13.68 — оказалось код ГРАМОТНЫЙ. +- `build_status_comment()` — единая точка для всех ролей. Обратная совместимость сохранена (старые `usage_comment`/`artifact_links` не удалены). `frontmatter.py` — защитный ридер, никогда не падает. +- 43 теста ORCH-16 — зелёные. +- НО: 4 теста падали (`test_m6_sequence.py` ×2, `test_plane_webhook.py` ×2) — НЕ вина ORCH-16, пришли с ORCH-10 (PR #33), отставший контракт. + +### Типы item в Plane (этот инстанс) — проверено через API +- ❌ Epics = 404, issue-types/work-item-types = 404 (кастомные типы выключены) +- ✅ `parent` у issue → sub-issues (под-задачи) РАБОТАЮТ +- ✅ `modules` (≈эпики), `cycles` (спринты) — есть, но пусты (n=0) +- Декомпозиция: через `parent` + `modules`, не через Epic→Story→Task типы. + +### ORCH-39: починка отставших тестов + дыра CI +- Завела ORCH-39 (id `7c061055`, Backlog) — для трекинга. Исполнение НЕ конвейером, а **Dev напрямую** (принцип ORCH-38: не жечь $15-20 на правку 4 тестов). +- **Корень падений (диагноз мой):** тесты хардкодят `_IN_PROGRESS = "b873d9eb..."` (ET in_progress UUID) для запросов по ORCH-проекту. После ORCH-10 `get_project_states(ORCH)["in_progress"]` = `e331bfb3`, не совпадает → pipeline не стартует → задача не создаётся → assert падает. Тесты отстали от per-project резолвинга, код прода правильный. +- ТЗ: `tasks/orchestrator/DEV_TASK_ORCH39_FIX_WEBHOOK_TESTS.md` (точные UUID-карты ET/ORCH, точки мока, off-limits src/). + +### Per-project state UUID (ЗАФИКСИРОВАТЬ — пригодятся) +- **ET (enduro-trails):** in_progress=`b873d9eb-993c-48cd-97ac-99a9b1623967`, approved=`a519a341-dada-4a91-8910-7604f82b79c5`, rejected=`ba958f3c-5db5-461d-8f82-89425e413b97` +- **ORCH (orchestrator):** in_progress=`e331bfb3-e17e-4699-ba48-4abb89c21b7b`, approved=`63f2c8fe-dcda-4ace-952f-dd88bd0118ff`, rejected=`4c769e90-bf80-4a52-b97a-e1c84904bfc3` + +### Dev фейл на биллинге → перезапуск +- Первый Dev упал: кончились кредиты дефолтной vibecode-модели. Перезапустила с `tokenator/claude-opus` явно. (Урок: при billing-фейле Dev — сразу перезапуск с tokenator-моделью.) + +### PR #35 (ORCH-39) — проверено лично +- `fix/ORCH-39-webhook-tests` → main, mergeable, НЕ смержен. +87/-9, 5 файлов. src/ НЕ тронут (только tests/ + pytest.ini + requirements.txt + ci.yml). +- Мой прогон: `342 passed, 0 failed, 0 skipped` (было 336 passed/6 skipped/4 failed). +- **БОНУС-находка Dev (глубже моей):** в `requirements.txt` не было `pytest-asyncio` → 6 async-тестов `test_orch10_states.py` МОЛЧА скипались. То есть async-пути ORCH-10 (per-project старт конвейера) вообще не проверялись, CI светил зелёным. Теперь pytest-asyncio добавлен, `asyncio_mode=auto`, `--strict-markers`, ci.yml `set -euo pipefail`. Те 6 тестов теперь PASSED. + +### Порядок мержа (ждёт ОК Славы — НЕ мержу сама) +1. PR #35 (ORCH-39) → main (база честно зелёная) +2. PR #34 (ORCH-16) → main (фича единого коммента) +3. Ребилд прод-контейнера на 8500 → фича реально заработает + +### Урок: CI-гейт был дырявым на самой важной логике +- Две дыры в одном месте: (а) красные тесты пропускались, (б) async-тесты скипались из-за отсутствия pytest-asyncio. Оба светили зелёным CI. Для self-hosting честный гейт качества критичен — теперь закрыто в PR #35.