auto-sync: 2026-06-05 14:40:01
This commit is contained in:
@@ -437,3 +437,80 @@ Dev (session orch9_docs_canon) отработал, я проверила не с
|
||||
- main HEAD до PR #32 = `f1b3146` (merge ORCH-35).
|
||||
|
||||
### Эталон enduro для канона: `/home/slin/repos/enduro-trails/` — CLAUDE.md (паспорт), docs/architecture/ (README+adr), .openclaw/agents/*.md (6 ролей, эталон каркаса промпта: frontmatter→контекст→что прочесть→что произвести→принципы→запрещено→эскалация).
|
||||
# 2026-06-05
|
||||
|
||||
## Orchestrator — CI-гейт качества закрыт ✅ (продолжение self-hosting ORCH-7)
|
||||
|
||||
### Главный итог
|
||||
**CI у orchestrator теперь честно зелёный.** Дефект изоляции тестов (тесты протекали друг в друга через синглтон `settings`) закрыт. Гейт качества для self-hosting работает по-настоящему.
|
||||
|
||||
### Что было сделано
|
||||
- **PR #27** (ветка `fix/isolate-webhook-tests-from-plane`) — три коммита:
|
||||
- `7bbab9c` — изоляция 3 webhook-тестов от живого Plane API (моки через ИСТОЧНИК `src.plane_sync.*`)
|
||||
- `e856e09` — миграция `test_plane_webhook_generates_sequential_ids` под новый контракт (задача создаётся при переходе В In Progress, а не на `work_item.created`)
|
||||
- `1baae81` — **autouse-фикстура в `tests/conftest.py`**, сбрасывает webhook-секрет (+ db_path) на синглтоне settings перед каждым тестом
|
||||
- Проверено лично на проде: полный `pytest tests/` в чистом docker-окружении = **294 passed, 0 failed** (было 10 failed). CI run 547/548 = **success** (впервые).
|
||||
- 401/HMAC/dedup тесты ЖИВЫ — фикстура их не сломала (они перекрывают её своим monkeypatch). Off-limits зона не тронута: правки только в `tests/conftest.py` и `tests/test_webhooks.py`, src/ чист.
|
||||
|
||||
### Ключевой урок — интерференция тестов через синглтон settings
|
||||
- `Settings` (Pydantic, src/config.py) читает env ОДИН раз при создании объекта `settings`.
|
||||
- `test_webhooks.py` ставит секрет жёстко `os.environ["..."]=""` на import-time; другие файлы — через `setdefault`; `test_webhook_dedup.py` ставит реальный `"s3cr3t"` через monkeypatch.
|
||||
- В ПОЛНОМ прогоне `pytest tests/` секрет протекал между файлами → HMAC включался → webhook-тесты ловили `assert 401 == 200`. По отдельности файл зелёный, вместе — красный.
|
||||
- **Решение-паттерн:** autouse-фикстура в conftest, сброс протекающего состояния синглтона через monkeypatch перед каждым тестом. НЕ менять сам механизм/защищённые тесты — только навести порядок с изоляцией. `db_path` тоже протекал (get_task_by_repo_branch возвращал stale) — Dev законно добавил и его сброс.
|
||||
|
||||
### Мерж ВЫПОЛНЕН ✅ (05.06, Слава дал «да»)
|
||||
- **PR #27 → MERGED в main** (HTTP 200). main HEAD = `d0a3424` Merge PR #27. Все 3 коммита фиксов в истории main.
|
||||
- **PR #26 → CLOSED без мержа** (поглощён #27).
|
||||
- Нюанс: CI на самом main после merge-commit отдельным прогоном не появился (workflow триггерится на push/PR-ветки; merge-commit мог не дёрнуть). Код в main = ровно то, что прогонялось зелёным (294 passed). Гейт на будущих PR работает.
|
||||
- **Пункт №1 self-hosting (CI-гейт) ЗАКРЫТ.** Осталось: удалить отработанные ветки fix/isolate, ci/add (косметика).
|
||||
|
||||
## Staging-среда для orchestrator (ORCH-30..35) — дизайн оформлен, задачи в Backlog
|
||||
(подробности выше по тексту дня; см. историю)
|
||||
|
||||
---
|
||||
|
||||
## СЕССИЯ flush 11:36 UTC — ребилд прода + статусная модель ORCH = ET
|
||||
|
||||
### Ребилд прода ВЫПОЛНЕН ✅ (Слава дал ОК)
|
||||
- Блокер `src/qg/checks.py` рассинхрон устранён: `docker compose up -d --build orchestrator` из main (`5ecd1c4`).
|
||||
- Постпроверка ЛИЧНО: прод checks.py == main `3f9fe07`; `is_self_hosting_repo("enduro-trails")`=False (ET пропускает staging-гейт «N/A»), `("orchestrator")`=True; 6 ET-задач на месте; очередь+breaker(closed)+preflight живы; **319 passed** (тесты гонятся из /repos/orchestrator — в образ НЕ копируются, только src/+data/).
|
||||
- ФАКТ: Dockerfile орка `build: .` копирует только `src/` + `data/`; тестов в образе нет (CI/репо).
|
||||
|
||||
### Статусная модель ORCH приведена к ET ✅ (Слава: «использовать такую же модель как в ET, не хватает — добавь»)
|
||||
- В ORCH-проекте было 5 базовых статусов, в ET — 14. **Создала 9 недостающих через Plane API** (Architecture/Development/Review/Testing/Approved/Rejected/Needs Input/In Review/Blocked) с теми же name/color/group. Теперь ORCH = 14, идентично ET по составу.
|
||||
- ⚠️ UUID у ORCH-статусов СВОИ (Plane генерит уникальные) → всплыл блокер ORCH-10 (код хардкодит ET-UUID). Самое критичное: webhook распознавал «старт конвейера» только по ET-UUID in_progress → ORCH-задача (её UUID e331bfb3) НЕ стартовала бы. Поэтому мой PATCH ORCH-16 state упал 400 — и хорошо, конвейер не встал криво.
|
||||
|
||||
### ORCH-10 (per-project резолвинг статусов) — ГОТОВ, ПРОВЕРЕН ЛИЧНО, PR #33 ЖДЁТ МЕРЖА
|
||||
- Сделал Dev по ТЗ `DEV_TASK_ORCH10_PER_PROJECT_STATES.md` (полные карты UUID обоих проектов в ТЗ — Dev не гадал).
|
||||
- Решение: `get_project_states(project_id)` читает статусы из Plane API + кэш `_STATES_CACHE` + fallback `_DEFAULT_STATES` (=текущие ET-значения). `reload_project_states()` для сброса.
|
||||
- Проверено мной: diff только plane_sync.py+webhooks/plane.py+tests; **342 passed (+23, 0 регрессий)**; живой резолвинг ET→ET-UUID (in_progress b873d9eb, architecture 3020bbb7), ORCH→ORCH-UUID (in_progress e331bfb3, architecture 795cc32f), UUID разные; enduro не сломан; webhook-старт распознаётся для обоих проектов.
|
||||
- **PR #33:** https://git.mva154.duckdns.org/admin/orchestrator/pulls/33 — НЕ смержен, жду «мержи» от Славы.
|
||||
|
||||
### ORCH-37 заведена (по просьбе Славы) — гигиена статусов Plane
|
||||
- Backlog, id `9ccc5490`. Суть: статусов на доске много, используем не все → ревизия + чистка неиспользуемых/дублей, минимальный набор под фактический конвейер. ОБЯЗАТЕЛЬНО согласовать со Славой и не сломать ET (статусы общие, после ORCH-10 резолвятся per-project). Не срочно.
|
||||
|
||||
### ПОРЯДОК до запуска ORCH-16 (первая самодоработка-прогрев):
|
||||
1. Слава говорит «мержи» → мерж PR #33 в main
|
||||
2. Ребилд прода из main
|
||||
3. Проверить резолвинг в ЖИВОМ контейнере (оба проекта)
|
||||
4. ТОГДА ORCH-16 `Backlog→In Progress` → webhook стартанёт конвейер (analyst первым)
|
||||
- ORCH-16 пока в Backlog (id `2b80c58c-2a83-4ab0-aa69-b7f5d2f8c345`), в описание дописаны ответы на 2 вопроса (текст+ссылка+1-строка вердикт; один коммент на агента за стадию).
|
||||
|
||||
### Скоуп ORCH-9 разведён (Вариант Б, ранее в сессии):
|
||||
- Орк-репо = только орк (PR #32 смержен в main `5ecd1c4`: CLAUDE.md паспорт + дока канона + 6 промптов + reviewer-gate).
|
||||
- Онбординг = отдельный репо `onboard2orch` (https://git.mva154.duckdns.org/admin/onboard2orch, коммит 3b0ea44): principles/checklist/examples(ET-референс). Методичка убрана из орк-ветки.
|
||||
|
||||
### КЛЮЧЕВЫЕ PLANE state-id (оба проекта, для будущих сессий):
|
||||
- **ORCH** (plane_id `8da6aa25-a60e-44d6-a1e2-d8ae59aa7d6a`): backlog `2d5d42ff`, todo `b5d3f512`, in_progress `e331bfb3`, architecture `795cc32f`, development `f5ed4705`, review `2026f3d9`, testing `81c5cd78`, approved `63f2c8fe`, rejected `4c769e90`, done `3738cd3c`, cancelled `59d1d210`, needs_input `99978b3f`, in_review `c52e99b9`, blocked `505f01a6`.
|
||||
- **ET** (plane_id `7a79f0a9-5278-49cd-9007-9a338f238f9c`): backlog `113b24f6`, todo `2c7d3df3`, in_progress `b873d9eb`, architecture `3020bbb7`, development `9920609b`, review `ba0d802c`, testing `7855d807`, approved `a519a341`, rejected `ba958f3c`, done `381a2833`, cancelled `b1cae7f9`, needs_input `babf08a3`, in_review `38fb1f64`, blocked `6c4543f9`.
|
||||
|
||||
### ФАКТЫ ОРКА (золотой источник):
|
||||
- НЕТ Makefile, НЕТ budget.yaml. Тесты: `pytest tests/ -q`. CI = Gitea Actions.
|
||||
- Прод 8500, staging 8501 (изолир. БД ./data/staging, profile staging). External: https://openclaw.mva154.duckdns.org/orchestrator/. Webhook: .../orchestrator/webhook/gitea (+ /webhook/plane).
|
||||
- Эндпоинты: GET /health, /status, /queue; POST /webhook/plane, /webhook/gitea.
|
||||
- Dockerfile `build: .` копирует только src/ + data/ (тестов в образе нет).
|
||||
- Webhook старт конвейера: `if new_state == PLANE_STATES["in_progress"]` (после ORCH-10 — резолв по project_id). Фильтр по проекту: unknown project → ignore (ORCH-6).
|
||||
- main HEAD = `5ecd1c4` (Merge PR #32).
|
||||
- Прод: контейнер `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 ролей).
|
||||
|
||||
Reference in New Issue
Block a user