ORCH-053: sweeper потерянных webhook (реконсиляция застрявших стадий) #56
Reference in New Issue
Block a user
Delete Branch "feature/ORCH-053-sweeper-webhook-stuck-task"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Фоновый daemon-поток
src/reconciler.pyустраняет тихое застревание задач, когда конвейер не двигается из-за потерянного webhook (502 на ребилде, нет ретраев у Plane/Gitea, неразрезолвленныйsha→branch— класс инцидента ORCH-044). Реконсилятор доигрывает пропущенный переход через те же штатные гейты/обработчики, что и webhook, не дублируя логику.stage≠done, без активного job,age(updated_at) ≥ grace— read-only пред-оценка QG; зелёный →advance_stage(..., finished_agent=None); красный → тишина.analysisF-1 не трогает (человеческий гейт).list_issues_by_state) → реплей In Progress/Approved/Rejected черезhandle_status_start/handle_verdict.sha→branchвhandle_ci_status(единственная development-задача repo; неоднозначность → не резолвим).create_task_atomicпод process-wideLock.reconcileвGET /queue.Старт/стоп в
main.lifespan(послеworker.start()/ передworker.stop()), restart-safe, never-raise. Kill-switchesORCH_RECONCILE_ENABLED/ORCH_RECONCILE_PLANE_ENABLED. Схема БД и реестрыSTAGE_TRANSITIONS/QG_CHECKSне менялись.Документация (golden source)
docs/architecture/README.md,docs/operations/INFRA.md(kill-switch),README.md/.env.example,CHANGELOG.md, adr-0007 → accepted.Test plan
Refs: ORCH-053
f08fcc4bc1to5089f99bb1