analyst(ET): auto-commit from analyst run_id=724
All checks were successful
CI / test (push) Successful in 1m8s
All checks were successful
CI / test (push) Successful in 1m8s
This commit is contained in:
@@ -14,26 +14,22 @@ Work Item: **ORCH-118** · Repo: **orchestrator** · Стадия: analysis
|
||||
> ⚠️ **Inventory-first.** Это **зонтичная inventory/architecture-задача**, а НЕ реализация
|
||||
> детерминированных раннеров. Её результат — **карта** всех мест вызова LLM + классификация +
|
||||
> упорядоченный roadmap + нормативная политика использования LLM, защищённая структурными тестами.
|
||||
> Реализация конкретных замен (deployer — **ORCH-115**, tester — **ORCH-116** и др.) — **последующие
|
||||
> задачи**, запускаемые ПОСЛЕ утверждения карты. Их код в ORCH-118 **не вносится** (см. §2 «Вне объёма»).
|
||||
> Реализация конкретных замен — **последующие задачи**, запускаемые ПОСЛЕ утверждения карты. Их код
|
||||
> в ORCH-118 **не вносится** (см. §2 «Вне объёма»).
|
||||
|
||||
> 📌 **Канонический маппинг follow-up'ов (источник истины — live Plane backlog).** Во всех
|
||||
> артефактах ORCH-118 ID привязаны к ролям строго так — НЕ путать порядок:
|
||||
>
|
||||
> | Follow-up | Роль-кандидат | Класс замены (ожидаемый) |
|
||||
> |-----------|---------------|--------------------------|
|
||||
> | **ORCH-115** | **deployer** (детерминированный деплой/staging) | `replace-deterministic-now` / `replace-later-risky` |
|
||||
> | **ORCH-116** | **tester** (детерминированный `pytest`+smoke) | `needs-hybrid-fallback` |
|
||||
>
|
||||
> Этот маппинг — нормативный для всего пакета (BRD/TRZ/AC/test-plan и будущего roadmap/ADR);
|
||||
> анти-дрейф маппинга закреплён тест-кейсом **TC-11** (`04-test-plan.yaml`). Расхождение роль↔ID с
|
||||
> этой таблицей = баг маршрутизации follow-up'ов (P1).
|
||||
> 📌 **Follow-up'ы именуются по РОЛИ, без выдуманных Plane-ID.** Roadmap рекомендует отдельные
|
||||
> follow-up задачи по ролям-кандидатам (**deployer-замена**, **tester-гибрид** и т.д.). Конкретные
|
||||
> Plane-ID этих задач в артефактах ORCH-118 **НЕ фиксируются** — они присваиваются при фактическом
|
||||
> заведении задач в backlog. Аналитик не имеет доказательного источника на конкретные ID и не должен
|
||||
> их выдумывать (см. NFR-6).
|
||||
|
||||
> 🔁 **Revision R2 (2026-06-15).** Исправлен P1-блокер ревью: в R1 маппинг ORCH-115/ORCH-116 был
|
||||
> **реверснут** (tester→115, deployer→116). Приведено к live backlog: **ORCH-115 = deployer**,
|
||||
> **ORCH-116 = tester** во всех местах BRD/TRZ; добавлены канонический-маппинг-callout и анти-дрейф
|
||||
> TC-11. Содержательная классификация ролей (deployer = replace-now, tester = hybrid) не менялась —
|
||||
> сменились только привязанные ID.
|
||||
> 🔁 **Revision R3 (2026-06-15).** Из пакета **удалена** нормативная привязка follow-up'ов к
|
||||
> конкретным ID `ORCH-115`/`ORCH-116` (этих work item нет ни в репозитории, ни в подтверждённом
|
||||
> backlog — claim «источник истины: live Plane backlog» был **непроверяемым**). Вместе с ней удалены
|
||||
> навязывавший её структурный тест (бывш. TC-11) и отдельный критерий приёмки (бывш. AC-9). Follow-up'ы
|
||||
> теперь описаны **по роли**, ID — TBD. Содержательная классификация ролей не менялась
|
||||
> (deployer = кандидат на детерминированную замену, tester = кандидат на hybrid-fallback).
|
||||
> *(R1→R2 ранее «чинил» порядок этих ID; R3 убирает корень проблемы — фиксацию несуществующих ID.)*
|
||||
|
||||
---
|
||||
|
||||
@@ -47,8 +43,8 @@ Work Item: **ORCH-118** · Repo: **orchestrator** · Стадия: analysis
|
||||
Установленный факт по текущему коду (инвентаризация — §1 TRZ, артефакт-карта):
|
||||
|
||||
- В оркестраторе **ровно одна точка запуска LLM** — `src/agents/launcher.py::_spawn` (одна
|
||||
`subprocess.Popen` сборка Claude CLI), которой пользуются **6 ролей-агентов** (analyst, architect,
|
||||
developer, reviewer, tester, deployer).
|
||||
`subprocess.Popen` сборка Claude CLI: `CLAUDE_BIN --print … --system-prompt "$(cat …)"`), которой
|
||||
пользуются **6 ролей-агентов** (analyst, architect, developer, reviewer, tester, deployer).
|
||||
- **Все остальные control-path'ы уже детерминированы (без LLM):** маршрутизация стадий
|
||||
(`STAGE_TRANSITIONS`/`advance_stage`), все Quality Gate'ы и под-гейты (`check_*`, security/merge/
|
||||
coverage/image-freshness), парсеры вердиктов (`_parse_*` через `frontmatter.py`), классификатор
|
||||
@@ -66,8 +62,8 @@ Work Item: **ORCH-118** · Repo: **orchestrator** · Стадия: analysis
|
||||
сохраниться.
|
||||
|
||||
ORCH-118 даёт **доказательную карту** «где LLM действительно нужен, а где это удобство» и
|
||||
**упорядоченный план** безопасных замен — фундамент, на котором ORCH-115/116 (и возможные следующие
|
||||
срезы) выполняются предсказуемо и без регресса.
|
||||
**упорядоченный план** безопасных замен — фундамент, на котором последующие срезы (по ролям-кандидатам)
|
||||
выполняются предсказуемо и без регресса.
|
||||
|
||||
## 2. Объём (scope)
|
||||
|
||||
@@ -78,17 +74,21 @@ ORCH-118 даёт **доказательную карту** «где LLM дей
|
||||
- **BR-3** Доказательное подтверждение (с привязкой `file:line`), что не-агентские control-path'ы
|
||||
(маршрутизация / ретраи / QG / парсеры / finalizer'ы) уже детерминированы.
|
||||
- **BR-4** Упорядоченный roadmap замен: зависимости, оценка экономии токенов/времени, риски
|
||||
безопасности, потребность в hybrid-fallback, рекомендованный **первый срез**.
|
||||
безопасности, потребность в hybrid-fallback, рекомендованный **первый срез** — кандидаты названы
|
||||
**по роли** (follow-up ID — TBD).
|
||||
- **BR-5** Нормативная **политика использования LLM** («LLM — только там, где нужно настоящее
|
||||
суждение») как durable-документ.
|
||||
- **BR-6** Структурные regression-тесты, **прибивающие инварианты карты к коду** (единственная точка
|
||||
запуска; детерминированные модули не несут запуска LLM; карта покрывает все промпты) — анти-дрейф.
|
||||
- **BR-7** Явно позиционировать **ORCH-115 (deployer)** и **ORCH-116 (tester)** как **кандидаты-follow-up**
|
||||
(канонический маппинг — врезка выше).
|
||||
запуска; детерминированные модули не несут запуска LLM; карта покрывает все промпты; тотальность
|
||||
классификации) — анти-дрейф.
|
||||
- **BR-7** Явно позиционировать **роль deployer** и **роль tester** как **кандидаты-follow-up** для
|
||||
детерминированной замены — **по роли, без привязки к конкретным Plane-ID** (см. NFR-6).
|
||||
|
||||
### Вне объёма
|
||||
- ❌ **Реализация** детерминированных раннеров deployer (ORCH-115) / tester (ORCH-116) и любых других замен —
|
||||
это отдельные задачи ПОСЛЕ утверждения карты (явное требование заказчика в business request).
|
||||
- ❌ **Реализация** детерминированных раннеров deployer / tester и любых других замен — это отдельные
|
||||
follow-up задачи ПОСЛЕ утверждения карты (явное требование заказчика в business request).
|
||||
- ❌ **Выдумывание/фиксация конкретных follow-up Plane-ID** (напр. `ORCH-115`/`ORCH-116`) в любых
|
||||
артефактах ORCH-118 — ID присваиваются при заведении задач (NFR-6).
|
||||
- ❌ Изменение `STAGE_TRANSITIONS` / реестра `QG_CHECKS` / семантики и имён `check_*` /
|
||||
machine-verdict-ключей (`verdict:`/`result:`/`staging_status:`/`deploy_status:`/`security_status:`/
|
||||
`coverage_status:`) / схемы БД.
|
||||
@@ -102,7 +102,7 @@ ORCH-118 даёт **доказательную карту** «где LLM дей
|
||||
- **Сопровождающие платформы (self-hosting)** — выигрывают в стабильности, скорости, экономии токенов.
|
||||
- **Downstream-проекты (enduro-trails)** — делят общий прод/очередь; для них требуется **нулевая
|
||||
регрессия** (NFR-1).
|
||||
- **Будущие исполнители ORCH-115/116/…** — потребители карты, roadmap и политики.
|
||||
- **Будущие исполнители follow-up'ов** — потребители карты, roadmap и политики.
|
||||
|
||||
## 4. Бизнес-требования (BR)
|
||||
|
||||
@@ -120,20 +120,22 @@ ORCH-118 даёт **доказательную карту** «где LLM дей
|
||||
зафиксировать, что маршрутизация стадий, ретраи, QG-проверки, парсеры вердиктов и finalizer'ы **не
|
||||
вызывают LLM**. Если инвентаризация найдёт неожиданный LLM-путь — он попадает в карту и
|
||||
классификацию.
|
||||
- **BR-4 — Упорядоченный roadmap.** Ранжированный план замен: для каждого кандидата — зависимости,
|
||||
**оценка** экономии токенов/времени (из телеметрии `agent_runs`), риск безопасности, нужен ли
|
||||
hybrid-fallback, ожидание kill-switch/обратимости, привязка к follow-up work item. Явно указать
|
||||
**рекомендованный первый срез** и обоснование выбора.
|
||||
- **BR-4 — Упорядоченный roadmap.** Ранжированный план замен: для каждого кандидата (названного **по
|
||||
роли**) — зависимости, **оценка** экономии токенов/времени (из телеметрии `agent_runs`), риск
|
||||
безопасности, нужен ли hybrid-fallback, ожидание kill-switch/обратимости. Явно указать
|
||||
**рекомендованный первый срез** и обоснование выбора. Привязка к follow-up задаче — **по роли**;
|
||||
конкретный Plane-ID НЕ фиксируется (заводится отдельно, NFR-6).
|
||||
- **BR-5 — Политика использования LLM.** Нормативный durable-документ: «LLM — только там, где требуется
|
||||
настоящее суждение»; критерии решения keep vs replace; требование к новым/изменённым control-path'ам
|
||||
обосновывать любое использование LLM против этой политики.
|
||||
- **BR-6 — Анти-дрейф структурными тестами.** Тесты, привязывающие инварианты карты к коду:
|
||||
единственная точка запуска LLM; перечисленные детерминированные модули/job-роли не несут запуска;
|
||||
карта перечисляет ровно те 6 промптов, что лежат в `.openclaw/agents/`; классификация покрывает все
|
||||
call-site'ы по одному разу. Тесты — offline (без сети/LLM/subprocess-к-модели).
|
||||
- **BR-7 — Позиционирование follow-up'ов.** Карта/roadmap явно отмечают **ORCH-115 (deployer)** и
|
||||
**ORCH-116 (tester)** (канонический маппинг — врезка в шапке) как кандидаты-замены, **не**
|
||||
реализуемые в ORCH-118; их старт гейтится утверждением карты.
|
||||
call-site'ы по одному разу. Тесты — offline (без сети/LLM/subprocess-к-модели). **Тест на привязку
|
||||
к конкретным follow-up ID не вводится** (анти-паттерн: прибивал бы карту к непроверяемым ID, R3).
|
||||
- **BR-7 — Позиционирование follow-up'ов по роли.** Карта/roadmap явно отмечают **роль deployer** и
|
||||
**роль tester** как кандидаты-замены, **не** реализуемые в ORCH-118; их старт гейтится утверждением
|
||||
карты. Привязка — **по роли**, без конкретных Plane-ID (NFR-6).
|
||||
|
||||
## 5. Нефункциональные требования (NFR)
|
||||
|
||||
@@ -150,6 +152,10 @@ ORCH-118 даёт **доказательную карту** «где LLM дей
|
||||
- **NFR-5 — Доказательность экономии.** Цифры экономии берутся из реальной телеметрии `agent_runs`
|
||||
(модель/эффорт/токены/стоимость/время по ролям) и помечаются как **оценки** до фактического замера
|
||||
после реализации.
|
||||
- **NFR-6 — Только проверяемые ссылки (анти-фабрикация, R3).** В артефактах фиксируются только
|
||||
ссылки, резолвящиеся в код/документы репозитория. Конкретные **follow-up Plane-ID не выдумываются**:
|
||||
кандидаты-замены именуются по роли; ID присваивается при заведении задачи. (Это закрывает корень
|
||||
отклонённой ревизии R2.)
|
||||
|
||||
## 6. Допущения и ограничения
|
||||
- Единственный транспорт LLM сейчас — Claude CLI через `launcher._spawn`; прямых вызовов Anthropic API
|
||||
@@ -158,17 +164,21 @@ ORCH-118 даёт **доказательную карту** «где LLM дей
|
||||
- Карта — **снимок на момент задачи**, защищённый структурными тестами от тихого расхождения с кодом.
|
||||
- Прецедент детерминированной замены агента уже существует и работает (`deploy-finalizer`/
|
||||
`post-deploy-monitor` в `launch_job` до `_spawn`) — это снижает архитектурный риск follow-up'ов.
|
||||
- На момент анализа конкретные follow-up work item для замены ролей в backlog **не подтверждены** —
|
||||
поэтому ID не фиксируются (NFR-6).
|
||||
|
||||
## 7. Критерии успеха
|
||||
Карта call-site'ов полна и привязана к коду; каждый site классифицирован с обоснованием; детерминизм
|
||||
не-агентских путей доказан; есть упорядоченный roadmap с зависимостями/экономией/рисками и
|
||||
рекомендованным первым срезом; есть нормативная политика; структурные тесты зелёные и осмысленные;
|
||||
ни один рантайм-инвариант не тронут; ORCH-115/116 НЕ реализованы. Детальные PASS/FAIL — в
|
||||
`03-acceptance-criteria.md`.
|
||||
рекомендованным первым срезом (кандидаты — по роли); есть нормативная политика; структурные тесты
|
||||
зелёные и осмысленные; ни один рантайм-инвариант не тронут; раннеры замен НЕ реализованы; ни один
|
||||
артефакт не фиксирует непроверяемых follow-up ID. Детальные PASS/FAIL — в `03-acceptance-criteria.md`.
|
||||
|
||||
## 8. Риски
|
||||
- **Недо-/пере-классификация** (LLM убран там, где нужно суждение, или сохранён там, где не нужен) →
|
||||
митигирует требование «назвать конкретное суждение» для `keep-LLM` и ревью карты.
|
||||
- **Дрейф карты** относительно кода со временем → митигируют структурные тесты (BR-6).
|
||||
- **Преждевременная замена** в погоне за экономией ценой автономности/гибкости → инвентаризация
|
||||
отделена от реализации; первый срез — самый низкорисковый. Детали — `10-tech-risks.md` (архитектор).
|
||||
отделена от реализации; первый срез — самый низкорисковый.
|
||||
- **Фабрикация ссылок/ID** (рецидив дефекта R2) → митигирует NFR-6 (только проверяемые ссылки;
|
||||
follow-up'ы — по роли) и ревью. Детали техн.рисков — `10-tech-risks.md` (архитектор).
|
||||
|
||||
@@ -16,8 +16,12 @@ Work Item: **ORCH-118** · Repo: **orchestrator** · Стадия: analysis
|
||||
> схема структурных тестов) — решает архитектор в `06-adr/`. ТЗ фиксирует требования и границы.
|
||||
>
|
||||
> ⚠️ **Скоуп — inventory + классификация + roadmap + политика + структурные тесты.** Реализация
|
||||
> детерминированных раннеров (ORCH-115/116) — **вне скоупа** (FR-7). Это **docs + tests only**:
|
||||
> `src/**`-рантайм не меняется.
|
||||
> детерминированных раннеров — **вне скоупа** (FR-7). Это **docs + tests only**: `src/**`-рантайм не
|
||||
> меняется.
|
||||
>
|
||||
> 📌 **Follow-up'ы — по роли, без выдуманных Plane-ID** (R3, NFR-6). Конкретные ID (напр.
|
||||
> `ORCH-115`/`ORCH-116`) в артефактах **не фиксируются** — этих work item нет в репо/подтверждённом
|
||||
> backlog; ID присваивается при заведении задачи.
|
||||
|
||||
---
|
||||
|
||||
@@ -29,19 +33,19 @@ Work Item: **ORCH-118** · Repo: **orchestrator** · Стадия: analysis
|
||||
рантайм-контракты (`STAGE_TRANSITIONS` / `QG_CHECKS` / `check_*` / machine-verdict-ключи / схема БД) —
|
||||
**не меняются**.
|
||||
|
||||
Опорный факт инвентаризации (ground-truth кода на момент задачи):
|
||||
Опорный факт инвентаризации (ground-truth кода на момент задачи; line-привязки уточняет карта):
|
||||
|
||||
| # | Call-site (LLM-capable) | Где | Что делает |
|
||||
|---|--------------------------|-----|------------|
|
||||
| S0 | **Единственная точка запуска** | `src/agents/launcher.py::_spawn` (сборка Claude CLI + `subprocess.Popen`) | запускает любую из 6 ролей |
|
||||
| S0 | **Единственная точка запуска** | `src/agents/launcher.py::_spawn` (сборка `CLAUDE_BIN --print … --system-prompt "$(cat …)"` + `subprocess.Popen`) | запускает любую из 6 ролей |
|
||||
| A1 | analyst | промпт `.openclaw/agents/analyst.md`, стадия `analysis` | анализ бизнес-запроса → 01–04 |
|
||||
| A2 | architect | `.openclaw/agents/architect.md`, стадия `architecture` | архитектурные решения → 06-adr |
|
||||
| A3 | developer | `.openclaw/agents/developer.md`, стадия `development` | реализация + PR |
|
||||
| A4 | reviewer | `.openclaw/agents/reviewer.md`, стадия `review` | ревью → `12-review.md` (`verdict:`) |
|
||||
| A5 | tester | `.openclaw/agents/tester.md`, стадия `testing` | `pytest`+smoke → `13-test-report.md` (`result:`) |
|
||||
| A6 | deployer | `.openclaw/agents/deployer.md`, стадии `deploy-staging`/`deploy` | `staging_check.py`/exit-code → `15`/`14` логи |
|
||||
| D1 | deploy-finalizer | `launch_job` перехват **до** `_spawn` | детерминированный (LLM не запускается) |
|
||||
| D2 | post-deploy-monitor | `launch_job` перехват **до** `_spawn` | детерминированный (LLM не запускается) |
|
||||
| D1 | deploy-finalizer | `launch_job` перехват **до** `_spawn` (`launcher.launch_job`) | детерминированный (LLM не запускается) |
|
||||
| D2 | post-deploy-monitor | `launch_job` перехват **до** `_spawn` (`launcher.launch_job`) | детерминированный (LLM не запускается) |
|
||||
|
||||
> Не-агентские control-path'ы (маршрутизация `advance_stage`, `QG_CHECKS`/`check_*`/`_parse_*`,
|
||||
> `error_classifier`, `serial_gate`/`merge_gate`/`coverage_gate`/`security_gate`/`staging_verdict`/
|
||||
@@ -87,15 +91,14 @@ Work Item: **ORCH-118** · Repo: **orchestrator** · Стадия: analysis
|
||||
Каждому call-site присвоен **ровно один** класс. Ожидаемое (из инвентаризации; финальное решение
|
||||
фиксирует архитектор в ADR): `analyst/architect/developer/reviewer → keep-LLM`;
|
||||
`deployer → replace-deterministic-now` или `replace-later/risky` (staging = exit-code-маппинг; прод
|
||||
self-hosting уже детерминирован Phase A/B/C) — кандидат **ORCH-115**; `tester → needs-hybrid-fallback`
|
||||
(детерминированный прогон `pytest`+smoke, LLM-суждение только на маппинг TC↔критерии / триаж падений)
|
||||
— кандидат **ORCH-116**; `deploy-finalizer/post-deploy-monitor → already-deterministic` (вне
|
||||
таксономии замен, как эталон).
|
||||
self-hosting уже детерминирован Phase A/B/C) — **кандидат-замена по роли deployer**;
|
||||
`tester → needs-hybrid-fallback` (детерминированный прогон `pytest`+smoke, LLM-суждение только на
|
||||
маппинг TC↔критерии / триаж падений) — **кандидат-замена по роли tester**;
|
||||
`deploy-finalizer/post-deploy-monitor → already-deterministic` (вне таксономии замен, как эталон).
|
||||
|
||||
> 📌 **Канонический маппинг (источник — live Plane backlog, нормативно для всего пакета):**
|
||||
> **ORCH-115 = deployer** (`replace-deterministic-now`/`replace-later-risky`), **ORCH-116 = tester**
|
||||
> (`needs-hybrid-fallback`). НЕ путать порядок; анти-дрейф — TC-11 (`04-test-plan.yaml`).
|
||||
> *(Revision R2: в R1 маппинг был реверснут — исправлено; содержательные классы ролей не менялись.)*
|
||||
> 📌 **Follow-up'ы — по роли, без Plane-ID (R3, NFR-6).** Кандидаты обозначаются ролью
|
||||
> (deployer-замена, tester-гибрid), а не конкретными ID. Привязка к будущему work item делается при
|
||||
> заведении задачи; ORCH-118 ID не выдумывает.
|
||||
|
||||
### FR-3 — Подтверждение детерминизма не-агентских путей (BR-3)
|
||||
Карта отдельным разделом фиксирует, с `file:line`-доказательством, что НЕ вызывают LLM:
|
||||
@@ -106,10 +109,11 @@ transition-lease. Любой найденный неожиданный LLM-пу
|
||||
классифицируется (FR-2).
|
||||
|
||||
### FR-4 — Упорядоченный roadmap замен (BR-4)
|
||||
Ранжированный список кандидатов; для каждого: зависимости (предпосылки/блокеры), **оценка** экономии
|
||||
токенов/времени (из `agent_runs`), риск безопасности, нужен ли hybrid-fallback, ожидание
|
||||
kill-switch/обратимости, привязка к follow-up work item (ORCH-115/116/…). Явно: **рекомендованный
|
||||
первый срез** + обоснование (самый низкорисковый, опирающийся на существующий прецедент D1/D2).
|
||||
Ранжированный список кандидатов (названных **по роли**); для каждого: зависимости (предпосылки/блокеры),
|
||||
**оценка** экономии токенов/времени (из `agent_runs`), риск безопасности, нужен ли hybrid-fallback,
|
||||
ожидание kill-switch/обратимости, и **тип будущей follow-up задачи по роли** (без конкретного
|
||||
Plane-ID — заводится отдельно, NFR-6). Явно: **рекомендованный первый срез** + обоснование (самый
|
||||
низкорисковый, опирающийся на существующий прецедент D1/D2).
|
||||
|
||||
### FR-5 — Политика использования LLM (BR-5)
|
||||
Нормативный durable-документ: принцип «LLM — только где нужно настоящее суждение»; критерии решения
|
||||
@@ -129,12 +133,15 @@ keep vs replace (детерминируемость выхода, наличие
|
||||
без дублей/пропусков).
|
||||
- **(e)** `D1/D2` действительно перехватываются в `launch_job` **до** `_spawn` (детерминированы).
|
||||
|
||||
### FR-7 — Скоуп-гард + канонический маппинг (BR-7)
|
||||
ORCH-115/116 (и любые другие замены) **не реализуются** в ORCH-118. Карта/roadmap явно помечают их
|
||||
как кандидаты-follow-up, старт которых гейтится утверждением карты. Тест/диф не должны содержать новых
|
||||
детерминированных раннеров tester/deployer. **Маппинг роль↔ID — нормативный (источник: live Plane
|
||||
backlog): ORCH-115 = deployer, ORCH-116 = tester** — одинаков во всех артефактах карты/roadmap/ADR;
|
||||
анти-дрейф маппинга — структурный тест TC-11 (реверс делает тест красным).
|
||||
> ❌ **Не вводить** тест, прибивающий карту к конкретным follow-up Plane-ID → ✅ тесты проверяют
|
||||
> только инварианты, резолвящиеся в код/файлы репозитория (R3, NFR-6). Привязка к несуществующим ID
|
||||
> была корнем отклонённой R2.
|
||||
|
||||
### FR-7 — Скоуп-гард (BR-7)
|
||||
Раннеры замен **не реализуются** в ORCH-118. Карта/roadmap явно помечают кандидатов **по роли**
|
||||
(deployer-замена, tester-гибрid) как follow-up, старт которых гейтится утверждением карты. Тест/диф не
|
||||
должны содержать новых детерминированных раннеров tester/deployer. **Конкретные follow-up Plane-ID не
|
||||
фиксируются** ни в одном артефакте (NFR-6).
|
||||
|
||||
## 4. Изменения API
|
||||
Нет. (Опциональная read-only наблюдаемость в `GET /queue`/`GET /metrics` — **вне скоупа** ORCH-118;
|
||||
@@ -156,4 +163,6 @@ FR-6 — обычные `pytest`-тесты, **не** Quality Gate и **не**
|
||||
- **Анти-дрейф:** структурные тесты держат карту синхронной с кодом; норматив сопровождения — «менял
|
||||
места вызова LLM → обнови карту и политику в том же PR» (фиксируется в политике и golden-source
|
||||
docs).
|
||||
- **Анти-фабрикация (R3):** артефакты фиксируют только проверяемые ссылки; follow-up'ы — по роли,
|
||||
без выдуманных Plane-ID (NFR-6).
|
||||
- **Self-hosting:** не деплоит/не рестартит прод/не трогает `main` — безопасно для общего инстанса.
|
||||
|
||||
@@ -13,8 +13,8 @@ Work Item: **ORCH-118** · Repo: **orchestrator** · Стадия: analysis
|
||||
|
||||
Формат: каждый критерий имеет **PASS** (что должно быть истинно для приёмки) и **FAIL** (что считается
|
||||
провалом). Reviewer/тестер проверяет их буквально по файлам репозитория. Напоминание: ORCH-118 —
|
||||
**inventory-first**, docs+tests only; реализация раннеров (ORCH-115/116) приёмкой **запрещена** в этой
|
||||
задаче (AC-7).
|
||||
**inventory-first**, docs+tests only; реализация раннеров приёмкой **запрещена** в этой задаче (AC-7);
|
||||
фиксация конкретных follow-up Plane-ID **запрещена** (AC-9, R3).
|
||||
|
||||
---
|
||||
|
||||
@@ -57,12 +57,14 @@ Work Item: **ORCH-118** · Repo: **orchestrator** · Стадия: analysis
|
||||
## AC-4 — Упорядоченный roadmap с обязательными атрибутами и первым срезом
|
||||
|
||||
**Условие:** Есть ранжированный roadmap детерминированных замен.
|
||||
- **PASS:** Roadmap упорядочен; для каждого кандидата указаны зависимости, **оценка** экономии
|
||||
токенов/времени (со ссылкой на источник — `agent_runs`/`usage`), риск безопасности, потребность в
|
||||
hybrid-fallback, ожидание kill-switch/обратимости и привязка к follow-up work item; явно назван
|
||||
**рекомендованный первый срез** с обоснованием.
|
||||
- **PASS:** Roadmap упорядочен; для каждого кандидата (названного **по роли**) указаны зависимости,
|
||||
**оценка** экономии токенов/времени (со ссылкой на источник — `agent_runs`/`usage`), риск
|
||||
безопасности, потребность в hybrid-fallback, ожидание kill-switch/обратимости и **тип follow-up
|
||||
задачи по роли** (без конкретного Plane-ID); явно назван **рекомендованный первый срез** с
|
||||
обоснованием.
|
||||
- **FAIL:** Roadmap не упорядочен; у кандидата отсутствует любой обязательный атрибут; оценка экономии
|
||||
не привязана к источнику; нет рекомендованного первого среза.
|
||||
не привязана к источнику; нет рекомендованного первого среза; кандидат привязан к выдуманному
|
||||
Plane-ID (→ см. AC-9).
|
||||
|
||||
---
|
||||
|
||||
@@ -86,7 +88,7 @@ Work Item: **ORCH-118** · Repo: **orchestrator** · Стадия: analysis
|
||||
`D1/D2` в `launch_job` до `_spawn`. Тесты не используют сеть/LLM/subprocess-к-модели. Полный
|
||||
`pytest tests/ -q` — зелёный.
|
||||
- **FAIL:** Тестов нет; тест тривиально проходит (не привязан к коду); любой тест красный; полный
|
||||
прогон `tests/` падает.
|
||||
прогон `tests/` падает; введён тест, прибивающий карту к конкретным follow-up Plane-ID (анти-паттерн R3).
|
||||
|
||||
---
|
||||
|
||||
@@ -95,9 +97,9 @@ Work Item: **ORCH-118** · Repo: **orchestrator** · Стадия: analysis
|
||||
**Условие:** ORCH-118 не меняет рантайм и не реализует раннеры.
|
||||
- **PASS:** Диф не меняет `STAGE_TRANSITIONS` / реестр и имена `QG_CHECKS`/`check_*` /
|
||||
machine-verdict-ключи / схему БД; в `src/**` нет нового детерминированного раннера tester/deployer
|
||||
(ORCH-115/116 не реализованы); изменения ограничены docs + новый(е) тест-файл(ы).
|
||||
(раннеры замен не реализованы); изменения ограничены docs + новый(е) тест-файл(ы).
|
||||
- **FAIL:** Изменён любой из перечисленных рантайм-контрактов; реализован детерминированный раннер
|
||||
(фолд ORCH-115/116); правки `src/**`-поведения вне инвентаря/тестов.
|
||||
замены; правки `src/**`-поведения вне инвентаря/тестов.
|
||||
|
||||
---
|
||||
|
||||
@@ -111,18 +113,22 @@ Work Item: **ORCH-118** · Repo: **orchestrator** · Стадия: analysis
|
||||
|
||||
---
|
||||
|
||||
## AC-9 — Канонический маппинг follow-up'ов (роль ↔ ID) корректен и пингуется тестом
|
||||
## AC-9 — Только проверяемые ссылки; follow-up'ы — по роли, без выдуманных ID (анти-фабрикация, R3)
|
||||
|
||||
**Условие:** Во всех артефактах привязка роли к follow-up work item совпадает с live Plane backlog.
|
||||
- **PASS:** Везде, где карта/BRD/TRZ/roadmap/ADR связывают роль с follow-up'ом, выполнено
|
||||
**ORCH-115 = deployer** и **ORCH-116 = tester**; ни в одном месте нет обратной привязки
|
||||
(tester→ORCH-115 / deployer→ORCH-116), в т.ч. в позиционных перечислениях вида «tester/deployer
|
||||
(ORCH-115/116)»; структурный тест **TC-11** проверяет это и краснеет при реверсе.
|
||||
- **FAIL:** Хотя бы одно место привязывает tester к ORCH-115 или deployer к ORCH-116; маппинг
|
||||
неоднозначен/противоречив между документами; TC-11 отсутствует или не ловит реверс.
|
||||
**Условие:** Ни один артефакт не фиксирует непроверяемых follow-up Plane-ID; кандидаты-замены
|
||||
именуются по роли.
|
||||
- **PASS:** Везде, где карта/BRD/TRZ/roadmap/ADR упоминают кандидата-замену, он назван **по роли**
|
||||
(deployer-замена, tester-гибрid); конкретные follow-up Plane-ID **не указаны**; все `file:line`/
|
||||
ссылки на документы резолвятся в репозиторий. Тип follow-up'а описан по роли, ID — «TBD / при
|
||||
заведении задачи».
|
||||
- **FAIL:** Любой артефакт фиксирует конкретный follow-up Plane-ID (напр. `ORCH-115`/`ORCH-116`) как
|
||||
нормативную привязку роли; присутствует ссылка/маркер, не резолвящийся в код/документ репозитория;
|
||||
введён структурный тест, прибивающий карту к конкретному follow-up ID.
|
||||
|
||||
> Контекст: это исправление **P1-блокера ревью R1** — в первой ревизии маппинг был реверснут. AC-9 +
|
||||
> TC-11 закрывают класс ошибки на будущее (анти-дрейф), а не только текущий инцидент.
|
||||
> Контекст: AC-9 заменяет ранее ошибочный «канонический-маппинг» критерий ревизии R2. Корень
|
||||
> отклонения R2 — фиксация **несуществующих** ID (`ORCH-115`/`ORCH-116`) как нормативного инварианта
|
||||
> с непроверяемым источником («live Plane backlog»). R3 запрещает фабрикацию ID и переводит follow-up'ы
|
||||
> на именование по роли.
|
||||
|
||||
---
|
||||
|
||||
@@ -137,4 +143,4 @@ Work Item: **ORCH-118** · Repo: **orchestrator** · Стадия: analysis
|
||||
| AC-6 | BR-6 / FR-6 |
|
||||
| AC-7 | BR-7 / FR-7 / NFR-1 / NFR-3 |
|
||||
| AC-8 | NFR-4 / правила агентов §2,§6 (golden-source) |
|
||||
| AC-9 | BR-7 / FR-7 (канонический маппинг роль↔ID; анти-дрейф TC-11) |
|
||||
| AC-9 | NFR-6 / BR-7 / FR-7 (только проверяемые ссылки; follow-up'ы по роли, без выдуманных ID) |
|
||||
|
||||
@@ -8,16 +8,18 @@ title: "LLM call-site inventory + classification + roadmap + usage policy (inven
|
||||
framework: pytest
|
||||
scope: >
|
||||
Покрываются СТРУКТУРНЫЕ инварианты карты вызовов LLM и анти-дрейф (FR-6), плюс скоуп-гард
|
||||
(рантайм-контракты не тронуты, раннеры не реализованы) и анти-дрейф канонического маппинга
|
||||
follow-up'ов (TC-11). ВНЕ покрытия: реализация детерминированных раннеров deployer (ORCH-115) /
|
||||
tester (ORCH-116) — отдельные follow-up задачи.
|
||||
(рантайм-контракты не тронуты, раннеры не реализованы) и анти-фабрикация ссылок/ID (TC-11).
|
||||
ВНЕ покрытия: реализация детерминированных раннеров deployer / tester — отдельные follow-up
|
||||
задачи (именуются по роли; конкретные Plane-ID в ORCH-118 не фиксируются, R3/NFR-6).
|
||||
notes: >
|
||||
Все тесты детерминированы и offline: без сети, без запуска LLM, без subprocess-к-модели.
|
||||
Имена файла теста и документов карты — примерные (финально решает архитектор); тест-кейсы
|
||||
привязываются к фактическим путям артефактов, выбранным в 06-adr. Полный регресс tests/
|
||||
должен оставаться зелёным (TC-08). Регрессом считается: появление второй точки запуска LLM,
|
||||
должен оставаться зелёным (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
|
||||
@@ -58,7 +60,7 @@ tests:
|
||||
|
||||
- id: TC-07
|
||||
type: unit
|
||||
description: "Полнота roadmap: документ roadmap для каждого кандидата содержит обязательные атрибуты (зависимости / оценка экономии со ссылкой на agent_runs / риск / hybrid-need / follow-up work item) и явно называет рекомендованный первый срез (FR-4 / AC-4)"
|
||||
description: "Полнота roadmap: документ roadmap для каждого кандидата (названного ПО РОЛИ) содержит обязательные атрибуты (зависимости / оценка экономии со ссылкой на agent_runs / риск / hybrid-need / тип follow-up задачи по роли) и явно называет рекомендованный первый срез (FR-4 / AC-4)"
|
||||
module: tests/test_llm_determinization_docs.py
|
||||
expected: PASS
|
||||
|
||||
@@ -82,6 +84,6 @@ tests:
|
||||
|
||||
- id: TC-11
|
||||
type: unit
|
||||
description: "Анти-дрейф канонического маппинга follow-up'ов (источник — live Plane backlog): в карте/roadmap ORCH-115 привязан к роли deployer, ORCH-116 — к роли tester; реверс роль↔ID (например tester→ORCH-115 / deployer→ORCH-116) делает тест красным. Защищает от P1-блокера ревью R1 (FR-7 / BR-7 / AC-9)"
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user