Files
orchestrator/docs/work-items/ORCH-118/04-test-plan.yaml
claude-bot bc5d550965
All checks were successful
CI / test (push) Successful in 1m8s
analyst(ET): auto-commit from analyst run_id=724
2026-06-15 23:17:18 +03:00

90 lines
6.6 KiB
YAML
Raw 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-118
stage: analysis
author_agent: analyst
status: ready-for-review
created_at: 2026-06-15
model_used: claude-opus-4-8
title: "LLM call-site inventory + classification + roadmap + usage policy (inventory-first, docs+tests only)"
framework: pytest
scope: >
Покрываются СТРУКТУРНЫЕ инварианты карты вызовов LLM и анти-дрейф (FR-6), плюс скоуп-гард
(рантайм-контракты не тронуты, раннеры не реализованы) и анти-фабрикация ссылок/ID (TC-11).
ВНЕ покрытия: реализация детерминированных раннеров deployer / tester — отдельные follow-up
задачи (именуются по роли; конкретные Plane-ID в ORCH-118 не фиксируются, R3/NFR-6).
notes: >
Все тесты детерминированы и offline: без сети, без запуска LLM, без subprocess-к-модели.
Имена файла теста и документов карты — примерные (финально решает архитектор); тест-кейсы
привязываются к фактическим путям артефактов, выбранным в 06-adr. Полный регресс tests/
должен оставаться зелёным (TC-10). Регрессом считается: появление второй точки запуска LLM,
запуск LLM в детерминированном модуле, дрейф карты относительно .openclaw/agents/, изменение
рантайм-контрактов (STAGE_TRANSITIONS / QG_CHECKS / check_* / machine-verdict / схема БД).
R3: тест на привязку follow-up'ов к конкретным Plane-ID УДАЛЁН (бывш. TC-11) как анти-паттерн —
прибивал карту к несуществующим ID; вместо него TC-11 проверяет анти-фабрикацию (ID не выдуманы).
tests:
- id: TC-01
type: unit
description: "Единственная точка запуска LLM: ровно одно место в src/** собирает/запускает Claude CLI (CLAUDE_BIN + --system-prompt + Popen/bash -c), и это launcher._spawn (FR-6a / AC-1)"
module: tests/test_llm_call_site_inventory.py
expected: PASS
- id: TC-02
type: unit
description: "Детерминированные модули без LLM: перечисленные leaf'ы (serial_gate, merge_gate, coverage_gate, security_gate, staging_verdict, review_parse, error_classifier, frontmatter, self_deploy, post_deploy, transition_lease, reconciler, job_reaper) не содержат запуска Claude CLI (FR-6b / AC-3)"
module: tests/test_llm_call_site_inventory.py
expected: PASS
- id: TC-03
type: unit
description: "Анти-дрейф промптов: карта перечисляет ровно те 6 промпт-файлов, что физически лежат в .openclaw/agents/ (двусторонняя сверка, нет лишних/пропущенных) (FR-6c / AC-1)"
module: tests/test_llm_call_site_inventory.py
expected: PASS
- id: TC-04
type: unit
description: "Тотальность классификации: каждый перечисленный в карте call-site отнесён ровно к одному классу из таксономии {keep-LLM, replace-deterministic-now, replace-later/risky, needs-hybrid-fallback}; без дублей и пропусков (FR-6d / AC-2)"
module: tests/test_llm_call_site_inventory.py
expected: PASS
- id: TC-05
type: unit
description: "keep-LLM требует обоснования: каждая запись класса keep-LLM несёт непустое поле названного конкретного суждения (FR-2 / AC-2)"
module: tests/test_llm_call_site_inventory.py
expected: PASS
- id: TC-06
type: unit
description: "Детерминированные job-роли: launch_job перехватывает deploy-finalizer и post-deploy-monitor ДО _spawn (LLM не запускается) — эталон паттерна замены (FR-6e / AC-3)"
module: tests/test_llm_call_site_inventory.py
expected: PASS
- id: TC-07
type: unit
description: "Полнота roadmap: документ roadmap для каждого кандидата (названного ПО РОЛИ) содержит обязательные атрибуты (зависимости / оценка экономии со ссылкой на agent_runs / риск / hybrid-need / тип follow-up задачи по роли) и явно называет рекомендованный первый срез (FR-4 / AC-4)"
module: tests/test_llm_determinization_docs.py
expected: PASS
- id: TC-08
type: unit
description: "Политика LLM существует и нормативна: документ политики содержит принцип 'LLM только где нужно суждение' и критерии keep vs replace (FR-5 / AC-5)"
module: tests/test_llm_determinization_docs.py
expected: PASS
- id: TC-09
type: integration
description: "Скоуп-гард рантайм-контрактов: снимок set ролей-агентов из STAGE_TRANSITIONS и набора имён QG_CHECKS не изменился относительно эталона — ORCH-118 не тронул машину стадий/гейты (FR-7 / AC-7)"
module: tests/test_llm_call_site_inventory.py
expected: PASS
- id: TC-10
type: integration
description: "Полный регресс tests/ остаётся зелёным (pytest tests/ -q) — инвентаризация и тесты не ломают существующий конвейер (NFR-1 / AC-6, AC-7)"
module: tests/
expected: PASS
- id: TC-11
type: unit
description: "Анти-фабрикация follow-up ID (R3 / NFR-6 / AC-9): документы карты/roadmap НЕ содержат привязки кандидатов-замен к конкретным follow-up Plane-ID несуществующих work item (паттерн ORCH-1\\d\\d, не равный самому ORCH-118 и не присутствующий в docs/work-items/); кандидаты именуются по роли. Заменяет ошибочный mapping-тест R2, прибивавший карту к выдуманным ID."
module: tests/test_llm_determinization_docs.py
expected: PASS