90 lines
6.6 KiB
YAML
90 lines
6.6 KiB
YAML
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
|