148 lines
7.6 KiB
YAML
148 lines
7.6 KiB
YAML
work_item: ORCH-061
|
||
title: "BUG: deploy-staging петля — откат на development (self-deploy)"
|
||
description: >
|
||
План тестов на устранение зацикливания deploy-staging -> development для
|
||
self-hosting orchestrator. Покрывает обе подтверждённые причины: (1) ложный
|
||
FAILED check_staging_status из-за заведомо инфраструктурных C9a/C9b в sandbox;
|
||
(2) трактовку "no changes to commit" на action-стадии как недовыполнения.
|
||
Тесты outcome-ориентированы и не предписывают механизм: часть кейсов помечена
|
||
как mechanism-dependent (а=sandbox-инфра честно, б=толерантность/отвязка) —
|
||
финальный набор подтверждает архитектор в ADR; реализуются тесты под выбранный
|
||
механизм. Инвариант страховки (реальный регресс откатывает) и условность
|
||
self-hosting проверяются ВСЕГДА.
|
||
tests:
|
||
# --- Главный сценарий: нет петли ----------------------------------------
|
||
- id: TC-01
|
||
type: unit
|
||
description: >
|
||
Корректный self-deploy: при staging_status SUCCESS и пройденном merge/freshness
|
||
sub-gate advance_stage(deploy-staging, finished_agent=deployer) продвигает к
|
||
deploy (Phase A approval-pending), НЕ откатывает на development. (AC-1)
|
||
module: tests/test_stage_engine.py
|
||
expected: PASS
|
||
|
||
- id: TC-02
|
||
type: unit
|
||
description: >
|
||
Регресс-страховка ORCH-35: реальный провал реальной pipeline-проверки ->
|
||
staging_status FAILED -> advance_stage откатывает deploy-staging -> development
|
||
+ set_issue_blocked. (AC-3)
|
||
module: tests/test_stage_engine.py
|
||
expected: PASS
|
||
|
||
# --- Причина №1: ложный инфраструктурный FAIL ---------------------------
|
||
- id: TC-03
|
||
type: unit
|
||
description: >
|
||
Классификация проверок staging_check: проверки, заведомо зависящие от
|
||
sandbox-инфраструктуры (C9a/C9b), отличимы (метка/категория) от реальных
|
||
pipeline-проверок. Чистая логика классификации/вердикта тестируется без
|
||
live staging/docker. (AC-2, mechanism-dependent: вариант б)
|
||
module: tests/test_staging_check_b6.py
|
||
expected: PASS
|
||
|
||
- id: TC-04
|
||
type: unit
|
||
description: >
|
||
Вердикт-логика: все реальные проверки PASS, падают ТОЛЬКО известные
|
||
sandbox-инфра проверки (C9a/C9b) -> итог не-FAILED (нет ложного отката).
|
||
(AC-2)
|
||
module: tests/test_qg_checks.py
|
||
expected: PASS
|
||
|
||
- id: TC-05
|
||
type: unit
|
||
description: >
|
||
Вердикт-логика: падает хотя бы одна РЕАЛЬНАЯ pipeline-проверка (помимо инфра)
|
||
-> итог FAILED (страховка не ослаблена, fail-closed). (AC-3)
|
||
module: tests/test_qg_checks.py
|
||
expected: PASS
|
||
|
||
# --- Причина №2: no changes на action-стадии ----------------------------
|
||
- id: TC-06
|
||
type: unit
|
||
description: >
|
||
На action-стадии (deploy-staging/deploy) для self-deploy отсутствие
|
||
git-изменений ("no changes to commit") НЕ приводит к откату/недопродвижению;
|
||
продвижение определяется exit + вердиктом, а не наличием коммита. (AC-4)
|
||
module: tests/test_launcher.py
|
||
expected: PASS
|
||
|
||
- id: TC-07
|
||
type: unit
|
||
description: >
|
||
На code-стадии (development) отсутствие изменений всё ещё обрабатывается
|
||
прежним образом (нет ложного "успеха" там, где код должен был измениться) —
|
||
изменение FR-3 не протекает на не-action стадии. (AC-4, regression-guard)
|
||
module: tests/test_launcher.py
|
||
expected: PASS
|
||
|
||
# --- Условность self-hosting --------------------------------------------
|
||
- id: TC-08
|
||
type: unit
|
||
description: >
|
||
Для не-self-hosting репо check_staging_status остаётся (True, "Staging gate
|
||
N/A …") и новое поведение НЕ активируется; поведение этих репо неизменно.
|
||
(AC-6, FR-5)
|
||
module: tests/test_qg.py
|
||
expected: PASS
|
||
|
||
# --- Kill-switch / обратная совместимость -------------------------------
|
||
- id: TC-09
|
||
type: unit
|
||
description: >
|
||
При выключенном флаге нового поведения (FR-6) система ведёт себя 1:1 как до
|
||
ORCH-061: инфра-FAIL снова приводит к FAILED/откату. Дефолт флага безопасен.
|
||
(AC-7)
|
||
module: tests/test_config.py
|
||
expected: PASS
|
||
|
||
# --- БАГ-8: реальный провал прод-деплоя ----------------------------------
|
||
- id: TC-10
|
||
type: unit
|
||
description: >
|
||
deploy_status FAILED (exit-code хука != 0) -> откат deploy -> development +
|
||
set_issue_blocked + release merge-lease + clear deploy-state (БАГ-8 не сломан).
|
||
(AC-5)
|
||
module: tests/test_deploy_rollback.py
|
||
expected: PASS
|
||
|
||
# --- Контракты / реестр / never-raise -----------------------------------
|
||
- id: TC-11
|
||
type: unit
|
||
description: >
|
||
Снапшот реестра QG_CHECKS и STAGE_TRANSITIONS не изменён неожиданно;
|
||
frontmatter-контракты staging_status/deploy_status (SUCCESS|FAILED, только
|
||
YAML) сохранены. (AC-8)
|
||
module: tests/test_qg_registry_snapshot.py
|
||
expected: PASS
|
||
|
||
- id: TC-12
|
||
type: unit
|
||
description: >
|
||
never-raise: новая логика staging-вердикта/advance при внутренней ошибке
|
||
(io/парсинг/docker/ssh) возвращает безопасный детерминированный вердикт и не
|
||
пробрасывает исключение в advance_stage. (AC-10)
|
||
module: tests/test_stage_engine.py
|
||
expected: PASS
|
||
|
||
# --- Интеграционный сквозной сценарий ------------------------------------
|
||
- id: TC-13
|
||
type: integration
|
||
description: >
|
||
Сквозной self-deploy на тестовой БД: задача deploy-staging при здоровом
|
||
стенде с инфра-only недочётами проходит deploy-staging -> deploy (Phase A) ->
|
||
(approve) -> deploy финализация SUCCESS -> done, БЕЗ единого отката на
|
||
development в логе переходов. (AC-1, AC-4)
|
||
module: tests/test_stage_engine.py
|
||
expected: PASS
|
||
|
||
- id: TC-14
|
||
type: integration
|
||
description: >
|
||
Наблюдаемость: при срабатывании нового поведения (игнор инфра-FAIL /
|
||
ожидаемые no-changes) присутствует явная лог-строка/диагностика, отличающая
|
||
"честно зелёный" от "зелёного с допущением". (AC-11)
|
||
module: tests/test_stage_engine.py
|
||
expected: PASS
|