10 KiB
10 KiB
2026-06-06
ORCH-46 запущен конвейером (вариант A) — 04:06 UTC
- Слава выбрал вариант A («вклеить findings», минимальный), велел сделать автономно (вести до конца как ORCH-47, дёргать только если упрётся в его решение).
- ТЗ:
tasks/orchestrator/DEV_TASK_ORCH-046.md(3 варианта дизайна, выбран A). Описание варианта A залито в Plane ORCH-46 (заголовок укорочен 120→77 символов под QG-0). - Суть A: в
src/stage_engine.pyвстраивать ТЕКСТ замечаний в task_desc деву (не только ссылку):- reviewer REQUEST_CHANGES (~стр.419): парсить
## Findingsиз 12-review.md → вынуть P0/P1 дословно - tester FAIL (~стр.455): вынуть reason + фрагмент 13-test-report.md
- новый хелпер-парсер (graceful, never raise, fallback на ссылку)
- reviewer REQUEST_CHANGES (~стр.419): парсить
- НЕ трогать: гейты check_* (ORCH-45/47), QG-реестр, retry/rollback-логику, webhook-пути.
- task 37, ветка
feature/ORCH-046-stage-engine-pass-reviewer-tes, analyst run 139. - ПЛАН (автономно): дать конвейеру пройти analyst→arch→dev→review→testing→deploy-staging.
- Это правка ЯДРА → следить внимательнее. На BRD-апруве задача встанет ждать Approved Славы (by design) — НЕ забыть, что на BRD нужен человек.
- Возможные затыки: (1) BRD-апрув ждёт Славу; (2) staging B6 isolation FAIL (как у ORCH-47 — не блокер кода, но даст FAILED на deploy-staging); (3) если петля dev↔review — теперь должна быть короче, т.к. фикс про передачу findings.
- Финал: ручной merge + ребилд прода (build образа + рестарт + claude-auth check) — по накатанному из LESSONS_2026-06-05.md.
✅ ORCH-46 ЗАКРЫТА (вариант A, автономно по доверию Славы) — 04:50 UTC
- Слава дал «вариант В» = вести совсем без остановок, апрув BRD за него.
- Прошёл конвейером БЕЗ ЕДИНОЙ ПЕТЛИ (иронично — задача про устранение петель): analysis→architecture→development→review (APPROVED с 1 раза)→testing (check_tests_passed принял result:PASS)→deploy-staging. Дев=1 заход.
- BRD-апрув не понадобился: задача стартовала через In Progress (а не Backlog) → это и есть Approved-эквивалент входа, BRD-гейт не застопорил (analysis→architecture auto-advance).
- Реализация (проверила лично): новый
src/review_parse.py(extract_review_findings/extract_test_failures, never raise, graceful fallback на ссылку),stage_engine.py+37/-6 — вклеиваетFindings (P0/P1):дословно деву +Причина: {reason}для tester. Критичная логика (retry/rollback/QG-реестр/гейты) НЕ тронута. ADR-001 «embed-findings-in-task-desc». 50 тестов passed. - Merge PR #43 (
0bc23984), деплой (chown+reset+build+up+health+auth-check) — review_parse активен в /app, claude-auth жив. - Staging FAIL = тот же B6/ORCH-48 (sandbox=NO, prod-ET/ORCH=YES) — деплоер сам в triage-note указал:
ORCH_PROJECTS_JSONstaging смотрит на прод. К коду ORCH-46 отношения НЕТ (9/10 PASS). Решение как с ORCH-47: код в прод, B6 отдельно. - ✅ Plane ORCH-046 → Done; task37 → done в БД.
Состояние прод-гейтов/ядра после ORCH-46:
- ✅ check_ci_green — поллинг (ORCH-45)
- ✅ check_tests_passed — читает result: (ORCH-47)
- ✅ stage_engine — передаёт деву ТЕКСТ findings, не только ссылку (ORCH-46)
- Бэклог high: ORCH-48/B6 (staging registry isolation — теперь стоит поднять приоритет: блокирует автономный deploy-staging у ВСЕХ ORCH-задач!), ORCH-44 (надёжность запуска агента)
ORCH-48 / B6 — ROOT CAUSE найден (05:00 UTC) — баг в ТЕСТЕ, не в инфре
- Деплоер думал: misconfig staging-контейнера (ORCH_PROJECTS_JSON смотрит на прод). НЕВЕРНО.
- Факт (проверено прямым запуском в orchestrator-staging):
known_plane_project_ids()отдаёт count=1, sandbox=True, ET=False, ORCH=False..env.stagingУЖЕ правильно задаёт ORCH_PROJECTS_JSON=только sandbox. Изоляция реестра в staging работает идеально. - Баг — в самом B6-чеке
scripts/staging_check.py(стр.263+): делаетsys.path.insert(0,"/repos/orchestrator")+ importsrc.projectsиз ХОСТ-worktree (где env НЕ staging) →importlib.reloadподхватывает env процесса harness, а не staging-контейнера → читается built-in _DEFAULT_PROJECTS (ET+ORCH) → ложный FAIL. - Решение ORCH-48: B6 должен проверять реестр ВНУТРИ staging-контейнера (его env), а не импортить из host-worktree. Правка кода
scripts/staging_check.py→ подходит для конвейера. - Built-in default registry (
src/projects.py_DEFAULT_PROJECTS) = ET+ORCH — он и подхватывался при пустом env у harness.
Приоритизация ORCH-46 vs ORCH-48 (утро 06.06) — для контекста
- Слава утром спросил «что первым: ORCH-46 или ORCH-48». Рекомендовала ORCH-46 первой (корень ручного пинания задач: «испорченный телефон» dev↔review, нет передачи текста findings, нет памяти между кругами). → Взяли ORCH-46, закрыли (см. выше).
- Следующая по логике — ORCH-48/B6 (root cause уже найден, см. блок выше): правка
scripts/staging_check.py, чтобы B6 проверял реестр ВНУТРИ staging-контейнера, а не импортилsrc.projectsиз host-worktree. Это разблокирует автономный deploy-staging для ВСЕХ ORCH-задач (сейчас у всех ложный FAIL на B6). - Прочий бэклог high: ORCH-44 (надёжность запуска агента).
ORCH-48 переигран на вариант (в) (06:56 UTC) — по решению Славы
- Первый прогон: архитектор выбрал вариант (а) (HTTP-эндпоинт
GET /projects), дев написал код, конвейер прошёл БЕЗ петель (analyst→…→deployer все exit 0) → deploy-staging FAILED → откат на development. - Причина FAIL = курица-яйцо варианта (а): B6 ходит на
/projectsработающего staging-инстанса, а эндпоинт запечён в образ → в текущем образе его НЕТ (404 на 8501 и 8500 проверено) → ложный FAIL. Требует ручного bootstrap-деплоя. Это класс поломки автономности. - Слава выбрал вариант (в) («запуск suite ВНУТРИ контейнера, без HTTP-эндпоинта») — принципиально без курицы-яйца ни сейчас, ни в будущем.
- Переигровка (сделала): (1)
git reset --hard 8b5b1f0ветки до analyst-артефактов (стёрла ADR(а)f77825b+ код(а)2cf873a+ reviewer/tester auto-commits), force-push; (2) встроила в02-trz.md §4блок «РЕШЕНИЕ ПРИНЯТО ВЛАДЕЛЬЦЕМ: вариант (в)» с обоснованием + что обязан зафиксировать архитектор (убрать host-path хак, запуск черезdocker exec, синхронно правитьdeployer.md+STAGING_CHECK.md, чистая_evaluate_b6, НЕ трогать прод-main/projects/.env), коммит7a6c7a0; (3)update_task_stage(38,"architecture")+enqueue_job(architect)через/tmp/replay_arch.pyс guard'ами (agent_running=None, нет активных jobs). job 91, run 151 architect стартовал 06:56. - ⚠️ Существует PR #45 на эту ветку (открыт при работе под (а)) — после переигровки указывает на пересобранную ветку. Не мержить раньше прохождения staging.
- Топология (для архитектора в ADR): Dockerfile НЕ копирует
scripts/в образ →staging_check.pyтолько через mount/repos/orchestrator/scripts/..., путь запуска внутри контейнера учесть. - План автономно: довести arch→dev→review→testing→deploy-staging. Теперь staging должен пройти САМ (в варианте (в) bootstrap не нужен). Финал — merge PR + ребилд прода по LESSONS_2026-06-05.
Документация сессии 05.06 — финал (подтверждено)
docs/history/LESSONS_2026-06-05.mdв main орка через PR #42 (615a778d), подтвержденоOK-IN-MAIN.- Внутри: постмортем ORCH-17/45/47, уловка-22 ORCH-47 (гейт чинит сам себя), памятка деплоя прода (
/appзапечён в образ → нуженbuild; порты 8500/8501; полная последовательность chown+reset+build+up+health+auth-check), грабли с root-owned файлами (рассинхрон git).