65 lines
4.7 KiB
YAML
65 lines
4.7 KiB
YAML
work_item: ORCH-119
|
||
stage: analysis
|
||
author_agent: analyst
|
||
status: ready-for-review
|
||
created_at: 2026-06-17
|
||
model_used: claude-opus-4-8
|
||
title: "Source-backed генерация 00-business-request.md (фикс хардкода TBD)"
|
||
framework: pytest
|
||
scope: >
|
||
Покрывается: рендер фактического description в 00-business-request.md вместо литерала TBD на обоих
|
||
путях создания (прямой A и отложенный срез ветки B / self-hosting ORCH-088), durable-персист
|
||
description (зеркало tasks.title), безопасный fallback при пустом описании, аддитивность схемы и
|
||
обратная совместимость. ВНЕ покрытия: реальные сетевые вызовы Gitea/Plane (мокаются), ретро-генерация
|
||
артефактов для уже существующих задач.
|
||
notes: >
|
||
TC-01 — ОБЯЗАТЕЛЬНЫЙ регресс-тест: красный на коде ДО фикса (доказывает баг хардкода TBD), зелёный
|
||
ПОСЛЕ. Сетевые вызовы (_create_gitea_branch / _create_initial_docs httpx, Plane API) мокаются —
|
||
тесты без сети/прода. Рекомендуется тестировать чистый рендер-хелпер (_render_business_request) на
|
||
уровне unit, а пути A/B — на уровне integration с моками httpx и временной SQLite-БД. Полный регресс
|
||
pytest tests/ -q должен оставаться зелёным. Перед правкой отложенного среза ветки свериться с
|
||
docs/work-items/ORCH-088/06-adr/ (анти-stale-base инвариант, TRACEABILITY).
|
||
|
||
tests:
|
||
- id: TC-01
|
||
type: unit
|
||
description: "ОБЯЗАТЕЛЬНЫЙ РЕГРЕСС. Рендер 00-business-request.md при непустом description содержит фактический текст запроса в разделе 'Description' и НЕ равен литералу TBD. Красный до фикса (хардкод TBD), зелёный после."
|
||
module: tests/test_orch119_business_request.py
|
||
expected: PASS
|
||
|
||
- id: TC-02
|
||
type: unit
|
||
description: "Fallback: при пустом/whitespace/None description рендер даёт явный безопасный маркер (напр. 'описание отсутствует в источнике'), функция не бросает исключение."
|
||
module: tests/test_orch119_business_request.py
|
||
expected: PASS
|
||
|
||
- id: TC-03
|
||
type: integration
|
||
description: "Путь B (отложенный, self-hosting): description персистнут при создании задачи и доступен из строки tasks; launcher._materialize_deferred_branch рендерит реальное описание в артефакт (мок httpx; description не теряется между созданием и claim)."
|
||
module: tests/test_orch119_business_request.py
|
||
expected: PASS
|
||
|
||
- id: TC-04
|
||
type: integration
|
||
description: "Путь A (прямой, serial_gate не применим): start_pipeline передаёт description в _create_initial_docs; артефакт содержит реальное описание (мок httpx, перехват записанного content)."
|
||
module: tests/test_orch119_business_request.py
|
||
expected: PASS
|
||
|
||
- id: TC-05
|
||
type: integration
|
||
description: "Обратная совместимость схемы: init_db на пустой БД и на БД со старой таблицей tasks (без колонки description) проходит; _ensure_column идемпотентен (повторный init_db — no-op); создание задачи не падает."
|
||
module: tests/test_orch119_business_request.py
|
||
expected: PASS
|
||
|
||
- id: TC-06
|
||
type: unit
|
||
description: "Целостность данных: многострочное описание со спецсимволами markdown рендерится без обрезки/искажения; идемпотентность — повторная материализация (Gitea 422) не перезаписывает уже записанное тело."
|
||
module: tests/test_orch119_business_request.py
|
||
expected: PASS
|
||
|
||
- id: TC-07
|
||
type: unit
|
||
description: "Анти-регресс гейтов: STAGE_TRANSITIONS / реестр QG_CHECKS / имена check_* импортируются без изменений (00-business-request.md остаётся информационным, не гейтится)."
|
||
module: tests/test_orch119_business_request.py
|
||
expected: PASS
|