ORCH-117: sandbox-only fail-closed guard for Plane writes from test process (fix regression ORCH-114) #139
Reference in New Issue
Block a user
Delete Branch "feature/ORCH-117-bug-test-staging-plane-writes-"
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-117 — sandbox-only fail-closed изоляция записи в Plane (регресс ORCH-114)
Тип:
fix(bug → escalate full-cycle). Закрывает корневой класс инцидента ORCH-114: тест/worktree-процесс выполнил РЕАЛЬНУЮ запись (PATCH …/issues/… state=<Done>+ комментарий «Stage: deploy → done») против боевого Plane-проекта, т.к. тест/staging-процессы наследуют живой боевой Plane-токен (PLANE_HEADERS/PROJECT_IDзахвачены литералами на импортеplane_sync— подмена env/токена постфактум бесполезна), и ничто не принуждало их писать только в sandbox. Симметрия прецедентуtests/conftest.py::_no_telegram.Решение (по ADR-001 / adr-0046)
src/plane_write_guard.py(never-raise в боевом пути, паттернdeploy_status_guard/serial_gate):decide(project_id, op, work_item) -> (ALLOW|BLOCK, reason)+audit_block/audit_allow.plane_sync(update_issue_state/add_comment/_set_issue_state_direct) через хелпер_guard_allows_write— на момент вызова, сразу после_resolve_project_idи до любого сетевого шага (ни GET, ни PATCH/POST)."pytest" in sys.modules/PYTEST_CURRENT_TEST); боевой и staging рантаймы (uvicorn src.main:app) — строгий no-op, byte-for-byte.plane_test_write_enabledИ проект ∈ sandbox-allowlistplane_test_sandbox_projects(дефолт = единственный SANDBOX). Боевой проект запрещён даже при opt-in (allowlist sandbox-only); нерезолвимый проект → блок (fail-closed).tests/conftest.py::_plane_sandbox_only(opt-in OFF для всего сьюта).Инвариант сохранён
STAGE_TRANSITIONS/ реестрQG_CHECKS/ семантика и именаcheck_*/ machine-verdict-ключи / схема БД — байт-в-байт не тронуты (это изоляция клиента Plane, не Quality Gate и не стадия).Тесты / документация
tests/test_orch117_plane_write_isolation.py— TC-01 обязательный регресс ORCH-114 (красный до врезки, зелёный после) + TC-02…TC-14. Бэйпас-фикстуры добавлены 4 pre-existing тестам, асёртящим mocked-httpx у примитивов записи.pytest tests/ -q -p no:cacheprovider --strict-markers).CLAUDE.md,docs/architecture/README.md,docs/operations/INFRA.md,.env.example(ORCH_PLANE_TEST_WRITE_ENABLED/ORCH_PLANE_TEST_SANDBOX_PROJECTS),CHANGELOG.md.ADR:
docs/work-items/ORCH-117/06-adr/ADR-001-sandbox-only-plane-write-guard.md, сквознойdocs/architecture/adr/adr-0046-sandbox-only-plane-write-guard.md.Refs: ORCH-117
🤖 Generated with Claude Code
fd3a37855ctof26908ffc4