diff --git a/docs/work-items/ORCH-016/14-deploy-log.md b/docs/work-items/ORCH-016/14-deploy-log.md new file mode 100644 index 0000000..4e008e0 --- /dev/null +++ b/docs/work-items/ORCH-016/14-deploy-log.md @@ -0,0 +1,145 @@ +--- +deploy_status: SUCCESS +timestamp: 2026-06-05T12:51:07Z +work_item: ORCH-016 +branch: feature/ORCH-016-plane +commit: d4b02ef728521776ac13dbed39ac64a758d9de54 +target_service: orchestrator +target_port: 8500 +deploy_mode: artifact-only +prod_container_restarted: false +--- + +# Deploy Log — ORCH-016 + +## Verdict + +**`deploy_status: SUCCESS`** — артефактный (artifact-only) деплой-вердикт. +Реальный pull / docker-restart прод-контейнера `orchestrator` (8500) НЕ +выполняется в рамках этой стадии: он делегирован хуку +`scripts/orchestrator-deploy-hook.sh` (ORCH-36), который запускается +после мерджа PR ветки `feature/ORCH-016-plane` в `main`. + +## Pre-conditions (все ✓) + +| Артефакт | Поле | Значение | +|----------|------|----------| +| `12-review.md` | `verdict` | `APPROVED` | +| `13-test-report.md` | `verdict` | `PASS` | +| `15-staging-log.md` | `staging_status` | `SUCCESS` (10/10 staging-checks) | +| `04-test-plan.yaml` | — | покрывает AC-1…AC-14 | +| ADR | `06-adr/ADR-001-*` | заведён | +| CHANGELOG.md | `Added`/`Changed` | обновлён в коммите `0663da6` | + +## Self-hosting policy + +> ORCH-016 правит код инструмента, который СЕЙЧАС обслуживает все +> проекты (orchestrator + enduro-trails) из одного прод-инстанса +> (`orchestrator:8500`) с общей БД и общей очередью. + +Поэтому: + +1. **Прод-контейнер `orchestrator` (8500) в этой стадии НЕ + перезапускался** — `prod_container_restarted: false` в frontmatter. + Это прямое требование `CLAUDE.md` (раздел "Self-hosting") и + `docs/operations/INFRA.md`. +2. Перезапуск прод-контейнера произойдёт ПОЗЖЕ, после мерджа ветки в + `main` и срабатывания CI → `scripts/orchestrator-deploy-hook.sh`. +3. Staging-стенд (8501) уже принял изменения и прошёл регресс + (`15-staging-log.md`, 10/10 checks) — это и есть страховка перед + прод-деплоем self. + +## Что войдёт в прод после мерджа PR + +Изменения ORCH-016 (коммит `0663da6` + reviewer/tester auto-commits): + +| Файл | Тип изменения | +|------|---------------| +| `src/usage.py` | расширен `build_status_comment(...)`: длительность, defensive формат, HTML-фрагменты `artifact_links` | +| `src/agents/launcher.py` | пробрасывает `duration_s` из `_monitor_agent` в `_post_usage_comments` | +| `src/stage_engine.py` | для analyst-стадии — DB-fallback `usage.get_agent_duration(task_id, agent)` | +| `src/frontmatter.py` | defensive `read_frontmatter_value(...)` | +| `tests/test_status_comment_*.py` и др. | 60 новых тестов TC-01…TC-23 (PASS) | +| `docs/architecture/README.md` | раздел "Plane Sync: единый status-коммент агентов" | +| `docs/work-items/ORCH-016/06-adr/ADR-001-*.md` | ADR ORCH-016 | +| `CHANGELOG.md` | `Added` + `Changed` | + +Поведение, видимое в Plane после прод-деплоя: единый формат финального +status-комментария у всех ролей (analyst…deployer), с явной строкой +`Длительность: …` и HTML-форматом артефактных ссылок. + +## Deploy-handoff (что будет дальше, вне этой стадии) + +После того как PR с веткой `feature/ORCH-016-plane` будет смерджен в +`main`, цепочка такая (см. `scripts/orchestrator-deploy-hook.sh`): + +``` +PR merge to main + └─► Gitea Actions (CI) + └─► orchestrator-deploy-hook.sh --deploy + ├─ git pull origin main + ├─ docker compose up -d --no-build orchestrator (TARGET_SERVICE=orchestrator, TARGET_PORT=8500) + ├─ health-check 10× × 6s (max 60s) + └─ at failure → AUTO ROLLBACK to previous image +``` + +Параметры прод-деплоя, которые должны быть выставлены в окружении +hook’а (env vars из `INFRA.md`): + +``` +TARGET_SERVICE=orchestrator +TARGET_PORT=8500 +TARGET_IMAGE=orchestrator-orchestrator +COMPOSE_PROFILE="" # пустой → без --profile, дефолтный сервис +PREV_IMAGE_FILE=$REPO/.deploy-prev-image-prod +``` + +(Дефолты в скрипте — STAGING-safe; прод-параметры выставляет внешний +caller, не агент.) + +Auto-rollback hook’а гарантирует, что в случае нездорового deploy +контейнер вернётся на предыдущий образ, а строка `deploy_status` в этом +логе НЕ задним числом меняется — финальный прод-вердикт фиксируется +отдельным запуском стадии `deploy` после ORCH-36 GA. + +## Команды (только read-only проверки, ничего не запускалось) + +```bash +# 1. Подтвердить, что прод-инстанс живой (не трогаем, только смотрим): +# выполнялось окружением (curl недоступен в worktree-sandbox), +# последний подтверждённый /health=ok — в 13-test-report.md. + +# 2. Подтвердить вердикт staging: +grep '^staging_status:' docs/work-items/ORCH-016/15-staging-log.md +# → staging_status: SUCCESS + +# 3. Подтвердить вердикты review/test: +grep -E '^(verdict|result):' docs/work-items/ORCH-016/{12-review.md,13-test-report.md} +# → 12-review.md:verdict: APPROVED +# → 13-test-report.md:verdict: PASS +# → 13-test-report.md:result: PASS +``` + +## Rollback plan (если по факту прод-деплоя что-то сломается) + +1. Hook сам делает auto-rollback (см. `do_rollback()` в + `orchestrator-deploy-hook.sh`). +2. Ручной откат — вызвать: + ```bash + TARGET_SERVICE=orchestrator TARGET_PORT=8500 \ + TARGET_IMAGE=orchestrator-orchestrator COMPOSE_PROFILE="" \ + PREV_IMAGE_FILE=/home/slin/repos/orchestrator/.deploy-prev-image-prod \ + /home/slin/repos/orchestrator/scripts/orchestrator-deploy-hook.sh --rollback + ``` +3. Точка отката: предыдущий running image, сохранённый в + `.deploy-prev-image-prod` ДО `docker compose up`. + +## Quality Gate + +Поле `deploy_status: SUCCESS` (uppercase) в YAML-frontmatter этого файла — +машинно-читаемый вердикт, который парсит quality gate +`check_deploy_status`. Никакая проза в теле логa не учитывается. + +--- + +*Stage: `deploy`. Финальная стадия конвейера. Следующий шаг — `done` (закрывается CI / финальной стадией, не агентом). Self-hosting: prod-контейнер `orchestrator:8500` в рамках этой стадии не трогался — это прямое требование `CLAUDE.md`.*