analyst(ET): auto-commit from analyst run_id=723
All checks were successful
CI / test (push) Successful in 1m10s

This commit is contained in:
2026-06-15 23:01:03 +03:00
parent d60980c149
commit c7bed44845
4 changed files with 63 additions and 13 deletions

View File

@@ -14,9 +14,27 @@ Work Item: **ORCH-118** · Repo: **orchestrator** · Стадия: analysis
> ⚠️ **Inventory-first.** Это **зонтичная inventory/architecture-задача**, а НЕ реализация
> детерминированных раннеров. Её результат — **карта** всех мест вызова LLM + классификация +
> упорядоченный roadmap + нормативная политика использования LLM, защищённая структурными тестами.
> Реализация конкретных замен (tester — ORCH-115, deployer — ORCH-116 и др.) — **последующие
> Реализация конкретных замен (deployer — **ORCH-115**, tester — **ORCH-116** и др.) — **последующие
> задачи**, запускаемые ПОСЛЕ утверждения карты. Их код в 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).
> 🔁 **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.
---
## 1. Бизнес-контекст и проблема
@@ -65,10 +83,11 @@ ORCH-118 даёт **доказательную карту** «где LLM дей
суждение») как durable-документ.
- **BR-6** Структурные regression-тесты, **прибивающие инварианты карты к коду** (единственная точка
запуска; детерминированные модули не несут запуска LLM; карта покрывает все промпты) — анти-дрейф.
- **BR-7** Явно позиционировать ORCH-115 (tester) и ORCH-116 (deployer) как **кандидаты-follow-up**.
- **BR-7** Явно позиционировать **ORCH-115 (deployer)** и **ORCH-116 (tester)** как **кандидаты-follow-up**
(канонический маппинг — врезка выше).
### Вне объёма
-**Реализация** детерминированных раннеров tester/deployer (ORCH-115/116) и любых других замен —
-**Реализация** детерминированных раннеров deployer (ORCH-115) / tester (ORCH-116) и любых других замен —
это отдельные задачи ПОСЛЕ утверждения карты (явное требование заказчика в business request).
- ❌ Изменение `STAGE_TRANSITIONS` / реестра `QG_CHECKS` / семантики и имён `check_*` /
machine-verdict-ключей (`verdict:`/`result:`/`staging_status:`/`deploy_status:`/`security_status:`/
@@ -112,8 +131,9 @@ ORCH-118 даёт **доказательную карту** «где LLM дей
единственная точка запуска LLM; перечисленные детерминированные модули/job-роли не несут запуска;
карта перечисляет ровно те 6 промптов, что лежат в `.openclaw/agents/`; классификация покрывает все
call-site'ы по одному разу. Тесты — offline (без сети/LLM/subprocess-к-модели).
- **BR-7 — Позиционирование follow-up'ов.** Карта/roadmap явно отмечают ORCH-115 (tester) и ORCH-116
(deployer) как кандидаты-замены, **не** реализуемые в ORCH-118; их старт гейтится утверждением карты.
- **BR-7 — Позиционирование follow-up'ов.** Карта/roadmap явно отмечают **ORCH-115 (deployer)** и
**ORCH-116 (tester)** (канонический маппинг — врезка в шапке) как кандидаты-замены, **не**
реализуемые в ORCH-118; их старт гейтится утверждением карты.
## 5. Нефункциональные требования (NFR)

View File

@@ -86,12 +86,17 @@ Work Item: **ORCH-118** · Repo: **orchestrator** · Стадия: analysis
Каждому call-site присвоен **ровно один** класс. Ожидаемое (из инвентаризации; финальное решение
фиксирует архитектор в ADR): `analyst/architect/developer/reviewer → keep-LLM`;
`tester → needs-hybrid-fallback` (детерминированный прогон `pytest`+smoke, LLM-суждение только на
маппинг TC↔критерии / триаж падений) — кандидат **ORCH-115**; `deployer → replace-deterministic-now`
или `replace-later/risky` (staging = exit-code-маппинг; прод self-hosting уже детерминирован Phase
A/B/C) — кандидат **ORCH-116**; `deploy-finalizer/post-deploy-monitor → already-deterministic` (вне
`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` (вне
таксономии замен, как эталон).
> 📌 **Канонический маппинг (источник — 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 маппинг был реверснут — исправлено; содержательные классы ролей не менялись.)*
### FR-3 — Подтверждение детерминизма не-агентских путей (BR-3)
Карта отдельным разделом фиксирует, с `file:line`-доказательством, что НЕ вызывают LLM:
маршрутизация (`advance_stage`/`STAGE_TRANSITIONS`), все `QG_CHECKS`/`check_*`, парсеры вердиктов
@@ -124,10 +129,12 @@ keep vs replace (детерминируемость выхода, наличие
без дублей/пропусков).
- **(e)** `D1/D2` действительно перехватываются в `launch_job` **до** `_spawn` (детерминированы).
### FR-7 — Скоуп-гард (BR-7)
### FR-7 — Скоуп-гард + канонический маппинг (BR-7)
ORCH-115/116 (и любые другие замены) **не реализуются** в ORCH-118. Карта/roadmap явно помечают их
как кандидаты-follow-up, старт которых гейтится утверждением карты. Тест/диф не должны содержать новых
детерминированных раннеров tester/deployer.
детерминированных раннеров tester/deployer. **Маппинг роль↔ID — нормативный (источник: live Plane
backlog): ORCH-115 = deployer, ORCH-116 = tester** — одинаков во всех артефактах карты/roadmap/ADR;
анти-дрейф маппинга — структурный тест TC-11 (реверс делает тест красным).
## 4. Изменения API
Нет. (Опциональная read-only наблюдаемость в `GET /queue`/`GET /metrics`**вне скоупа** ORCH-118;

View File

@@ -111,6 +111,21 @@ Work Item: **ORCH-118** · Repo: **orchestrator** · Стадия: analysis
---
## AC-9 — Канонический маппинг follow-up'ов (роль ↔ ID) корректен и пингуется тестом
**Условие:** Во всех артефактах привязка роли к 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 отсутствует или не ловит реверс.
> Контекст: это исправление **P1-блокера ревью R1** — в первой ревизии маппинг был реверснут. AC-9 +
> TC-11 закрывают класс ошибки на будущее (анти-дрейф), а не только текущий инцидент.
---
## Сводная матрица AC ↔ FR/BR
| AC | Покрывает |
|----|-----------|
@@ -122,3 +137,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) |

View File

@@ -8,8 +8,9 @@ title: "LLM call-site inventory + classification + roadmap + usage policy (inven
framework: pytest
scope: >
Покрываются СТРУКТУРНЫЕ инварианты карты вызовов LLM и анти-дрейф (FR-6), плюс скоуп-гард
(рантайм-контракты не тронуты, раннеры не реализованы). ВНЕ покрытия: реализация
детерминированных раннеров tester/deployer (ORCH-115/116) — отдельные follow-up задачи.
(рантайм-контракты не тронуты, раннеры не реализованы) и анти-дрейф канонического маппинга
follow-up'ов (TC-11). ВНЕ покрытия: реализация детерминированных раннеров deployer (ORCH-115) /
tester (ORCH-116) — отдельные follow-up задачи.
notes: >
Все тесты детерминированы и offline: без сети, без запуска LLM, без subprocess-к-модели.
Имена файла теста и документов карты — примерные (финально решает архитектор); тест-кейсы
@@ -78,3 +79,9 @@ tests:
description: "Полный регресс tests/ остаётся зелёным (pytest tests/ -q) — инвентаризация и тесты не ломают существующий конвейер (NFR-1 / AC-6, AC-7)"
module: tests/
expected: PASS
- 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)"
module: tests/test_llm_determinization_docs.py
expected: PASS