Files
orchestrator/docs/work-items/ORCH-076/04-test-plan.yaml

123 lines
6.4 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
work_item: ORCH-076
title: "ORCH-52c — handoff-протокол + frontmatter writer/валидатор/единый контракт вердиктов"
framework: pytest
scope: >
Покрывается: writer/валидатор/единое чтение frontmatter (src/frontmatter.py);
чтение пяти гейтов-вердиктов через единый API при семантике 1:1; обратная
совместимость старых доков без новой схемы; never-raise; kill-switch строгой
валидации. Вне покрытия: правка промптов агентов (ORCH-52d), ретро-фит старых
документов, изменение STAGE_TRANSITIONS/состава QG_CHECKS.
notes: >
Полный регресс tests/ должен оставаться зелёным (анти-регресс гейтов, AC-4/AC-6).
Регресс = любой существующий тест гейтов (review/tester/deploy/staging/security),
ставший красным, или изменение вердикта при том же входном значении.
Тесты не должны требовать сети (frontmatter — файловый/in-memory контракт).
tests:
# --- frontmatter.py: writer / валидатор / reader (AC-1, AC-5) ---
- id: TC-01
type: unit
description: "Writer сериализует mapping в каноничный ведущий YAML-frontmatter (--- ... ---), читаемый существующими парсерами"
module: tests/test_frontmatter.py
expected: PASS
- id: TC-02
type: unit
description: "Round-trip: writer записал frontmatter -> reader read_frontmatter_value возвращает те же значения по ключам"
module: tests/test_frontmatter.py
expected: PASS
- id: TC-03
type: unit
description: "Валидатор: полная схема (work_item/stage/author_agent/status/created_at/model_used) -> valid=True, нет отсутствующих полей"
module: tests/test_frontmatter.py
expected: PASS
- id: TC-04
type: unit
description: "Валидатор: отсутствие части обязательных полей -> valid=False со списком отсутствующих, но БЕЗ исключения (warning-only по умолчанию)"
module: tests/test_frontmatter.py
expected: PASS
- id: TC-05
type: unit
description: "never-raise: writer и валидатор на битом вводе (None/не-mapping/нечитаемый путь/битый YAML) не выбрасывают исключение, возвращают безопасное значение + лог"
module: tests/test_frontmatter.py
expected: PASS
- id: TC-06
type: unit
description: "reader read_frontmatter_value сохраняет прежний контракт (single-key, None на ошибку/отсутствие, strip, регистр сохранён)"
module: tests/test_frontmatter.py
expected: PASS
- id: TC-07
type: unit
description: "kill-switch frontmatter_validation_strict: False -> отсутствие полей не блокирует; True -> строгий режим сигнализирует невалидность"
module: tests/test_frontmatter.py
expected: PASS
# --- единый контракт вердиктов: чтение через общий API, семантика 1:1 (AC-3, AC-6) ---
- id: TC-08
type: unit
description: "check_reviewer_verdict через единый API: verdict: APPROVED -> (True); REQUEST_CHANGES -> (False); отсутствие -> (False) — как до задачи"
module: tests/test_qg_verdicts.py
expected: PASS
- id: TC-09
type: unit
description: "_parse_tests_verdict через единый API: ORCH-047 три равноранговых поля (result/verdict/status), приоритет негативного токена (BLOCKED/FAILED) сохранён"
module: tests/test_qg_verdicts.py
expected: PASS
- id: TC-10
type: unit
description: "_parse_deploy_status через единый API: deploy_status SUCCESS -> (True); FAILED -> (False); missing/bad YAML -> (False) — семантика БАГ-8 неизменна"
module: tests/test_qg_verdicts.py
expected: PASS
- id: TC-11
type: unit
description: "_parse_staging_status через единый API: SUCCESS/FAILED семантика и условность ORCH-35 (non-self -> N/A pass) сохранены"
module: tests/test_qg_verdicts.py
expected: PASS
- id: TC-12
type: unit
description: "parse_security_status через единый API: security_status PASS -> (True); FAIL -> (False) — семантика неизменна"
module: tests/test_security_gate.py
expected: PASS
# --- обратная совместимость / анти-регресс (AC-4) ---
- id: TC-13
type: unit
description: "Старый док-вердикт БЕЗ новой схемы (только verdict/result/deploy_status/staging_status/security_status) читается каждым из пяти гейтов как до задачи"
module: tests/test_qg_verdicts.py
expected: PASS
- id: TC-14
type: unit
description: "Док С новой полной схемой + вердикт-ключом читается гейтом с тем же вердиктом, что и без схемы (схема аддитивна, не влияет на вердикт)"
module: tests/test_qg_verdicts.py
expected: PASS
- id: TC-15
type: integration
description: "fallback worktree -> origin/main для check_deploy_status/check_staging_status сохранён при чтении через единый API"
module: tests/test_qg_verdicts.py
expected: PASS
# --- инварианты конвейера (AC-6) ---
- id: TC-16
type: unit
description: "Состав QG_CHECKS и STAGE_TRANSITIONS не изменён (тот же набор ключей/стадий, что эталон)"
module: tests/test_stages_invariants.py
expected: PASS
# --- полный регресс ---
- id: TC-17
type: integration
description: "Полный прогон tests/ зелёный (нет регресса существующих тестов гейтов и конвейера)"
module: tests/
expected: PASS