architect(ET): auto-commit from architect run_id=497

This commit is contained in:
2026-06-09 20:37:21 +03:00
committed by orchestrator-deployer
parent 96a99a09b7
commit ab083ba826
7 changed files with 609 additions and 1 deletions

View File

@@ -278,6 +278,45 @@ Phase A ждёт ручного `Confirm Deploy`, ORCH-059). ORCH-089 снима
`docs/work-items/ORCH-089/06-adr/ADR-001-auto-label-gates.md`,
`docs/work-items/ORCH-089/07-infra-requirements.md`.
### STOP / отмена задачи: терминал `cancelled` + закрытие дыры релонча (ORCH-090 — design)
До ORCH-090 не было штатного способа отменить задачу (ручная хирургия по БД/процессам) и
существовала **дыра релонча**: `handle_status_start` при существующей задаче без активного job
безусловно релончил агента текущей стадии на той же ветке. ORCH-090 вводит Plane-статус **STOP**
как единый декларативный сигнал отмены: остановка агента + **полный сброс** прогресса. Аддитивно,
под kill-switch, never-raise, restart-safe; `STAGE_TRANSITIONS` (exit-гейты) / `QG_CHECKS` /
`check_*`**без изменений**.
- **Новое системное терминальное состояние `cancelled`** (adr-0026) — `tasks.stage='cancelled'` +
`jobs.status='cancelled'`, равноправное `done`. Предикат «задача незавершена» расширяется
`stage != 'done'``stage NOT IN ('done','cancelled')` в `serial_gate` (ORCH-088) и `task_deps`
(ORCH-026), приводя их в соответствие с уже существующим терминал-скипом реконсилятора
(`stage in ("done","cancelled")`, ORCH-086 D2). Иначе отменённая задача заклинила бы очередь репо.
- **Распознавание (fail-closed):** новый ключ `stop` в `_PLANE_NAME_TO_KEY` (`"STOP" → "stop"`);
**не** в `_DEFAULT_STATES` (по образцу `confirm_deploy`/ORCH-059) → нет статуса = нет отмены, без
`KeyError`. `handle_issue_updated` маршрутизирует `stop` → новый `handle_stop`
`stage_engine.cancel_task`.
- **Каскад отмены:** graceful SIGTERM активному агенту (переиспользование каскада
`launcher._watchdog` по `jobs.pid`); `cancel_jobs_for_task` (queued/running → `cancelled`,
не реквью'ятся); снятие таймеров/мониторов (brd-clock, post-deploy monitor, defer'ы);
`remove_worktree` + never-raise удаление **только feature-ветки** Gitea (`main` неприкосновенен,
без force-push); **тумбстон** `plane_id`/`work_item_id` (`#cancelled-<id>`) → повторный
«To Analyse» создаёт задачу с нуля; docs-артефакты (`01..17`) сохраняются.
- **Безопасное прерывание merge/deploy:** STOP в критическом окне (self-deploy `INITIATED`-sentinel
ORCH-036, держание merge-lease ORCH-043/071) → **отложенная отмена** (durable
`cancel_requested_at`, отмена только `queued`-job'ов, алерт); необратимый шаг доводится до
честного исхода; `main`/прод-контейнер не трогаются (NFR-3).
- **Закрытие дыры релонча:** relaunch в `handle_status_start` ограничен стадией `analysis`
(единственный владелец Needs-Input, ORCH-066) — тихий релонч середины пайплайна на старой ветке
устранён; единственный вход к запуску — «To Analyse» (`start_pipeline`).
- **Флаги/наблюдаемость:** kill-switch `stop_status_enabled` + `stop_status_repos` (CSV, пусто →
все репо); leaf `src/cancel.py` (never-raise); read-only блок `stop` в `GET /queue`; лог +
Telegram (кликабельный номер) + Plane-коммент + live-карточка. При выключенном флаге — нулевая
регрессия (enduro не затронут).
Подробнее: [adr-0026](adr/adr-0026-stop-cancel-task.md), детально —
`docs/work-items/ORCH-090/06-adr/ADR-001-stop-cancel-task.md`,
`docs/work-items/ORCH-090/08-data-requirements.md`.
### Исполняемый самодеплой стадии `deploy` (ORCH-36)
`deploy` перестаёт быть «бумажной»: для self-hosting (`is_self_hosting_repo`) стадия
РЕАЛЬНО деплоит прод (8500) через хост-хук `scripts/orchestrator-deploy-hook.sh`,