ORCH-112: resilient-pull hygiene for dirty shared deploy-base (fix incident ORCH-111) #136
Reference in New Issue
Block a user
Delete Branch "feature/ORCH-112-bug-failed-cancelled-task-arti"
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?
ORCH-112 — гигиена shared deploy-базы: устойчивый self-deploy
git pullТип:
fix(bug → escalate full-cycle). Инцидент: ORCH-111.Проблема
Прод-self-deploy падал на шаге
git pull origin mainхост-хука сerror: Your local changes to the following files would be overwritten by merge: src/config.py— грязь, оставленная неуспешной/отменённой/брошенной задачей ORCH-104 в общем main checkout.
Деплой вставал → ручное вмешательство (на self-hosting — групповой риск: встаёт деплой всех проектов).
Решение (по ADR-001 / adr-0044)
Resilient-pull, встроенный в прод-deploy-хук (
--deploy): передgit pullхук при обнаружениигрязи приводит deploy-базу к чистому актуальному
origin/main(
git fetch+git reset --hard origin/main+ скоупленныйgit clean -fd).src/checkout_hygiene.py(чистый never-raise, образецserial_gate/cancel/self_deploy):applies(repo)(kill-switch + скоуп, пусто → self-hosting only, локально и ПЕРВЫМ),hook_env(инжекцияCHECKOUT_HYGIENE=1 HYGIENE_REPORT=…в detached-командуself_deploy.build_deploy_commandтолько при
applies==True, иначе""→ голый pull 1:1),read_report/alert_dirty(наблюдаемость),snapshot()(read-only блокGET /queue).git clean— только-fd, НИКОГДА-x; явные-e '.deploy-prev-image-*'и
-e 'deploy-hook.log'; sibling.deploy-state-*/.merge-lease-*.jsonи.git/worktrees/*— вне области.cancel_taskне расширяется,janitor не вводится. Наблюдаемость — Phase-C finalizer читает sentinel
hygiene+ Telegram-алерт.Инварианты
Аддитивно, под kill-switch (
ORCH_CHECKOUT_HYGIENE_ENABLED, дефолтtrue; off → байт-в-байт до ORCH-112),never-raise, скоуп self-hosting.
STAGE_TRANSITIONS/ реестрQG_CHECKS/ семантика и именаcheck_*/machine-verdict-ключи / схема БД / exit-code-контракт хука (0/1/2, ORCH-036) — байт-в-байт не тронуты.
Тесты
tests/test_deploy_checkout_hygiene.py(TC-01…TC-10: шелл-симуляция реального хука во временном git-репобез сети/прода/ssh + unit). TC-01 — обязательный регресс ORCH-111: КРАСНЫЙ до фикса, ЗЕЛЁНЫЙ после.
Полный регресс —
pytest tests/ -q: 2018 passed.Документация (golden source, в том же PR)
CLAUDE.md,CHANGELOG.md,.env.example(developer);docs/operations/INFRA.md,docs/architecture/README.md,adr-0044(architecture-стадия). ADR:docs/work-items/ORCH-112/06-adr/ADR-001-deploy-base-checkout-hygiene.md.🤖 Generated with Claude Code
b4d28a5401to344ab72f37