docs(research): зафиксировано внешнее ревью петли субагентов
- Зачем:
- закрыть отложенный заход эксперимента: внешнее ревью результата
автономной петли моделью другой родословной (дизайн-линия, не Кодекс).
- Что:
- добавлена секция об итогах ревью: прогноз по находке A не оправдался,
петля её поймала (try→fresh + регрессионный тест в коммите 640050e).
- зафиксировано, что внешний взгляд добавил сквозные находки (расхождение
живого/восстановленного путей, форма распределения длины визита).
- уточнена гипотеза о пользе reviewer-а другой родословной.
- Проверка:
- git show --stat HEAD; чтение docs/research/2026-06-11-subagent-coordinator-experiment.md.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -349,6 +349,77 @@ worker чинит выбранное -> reviewer проверяет риск ->
|
|||||||
при большом исправлении повторить reviewer -> координатор коммитит
|
при большом исправлении повторить reviewer -> координатор коммитит
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Внешнее ревью другой моделью (отложенный заход, 2026-06-14)
|
||||||
|
|
||||||
|
Отложенное ревью результата петли (его наметил handoff
|
||||||
|
`2026-06-11-generator-time-adr-and-pending-review.md`) выполнено. Ревью провела
|
||||||
|
**модель другой родословной** — та, что вела дизайн, ADR и спеки, а не линия
|
||||||
|
Кодекс, писавшая код. Это и есть проверка центральной гипотезы эксперимента:
|
||||||
|
какой класс дефектов автономная петля систематически не видит без внешнего
|
||||||
|
взгляда.
|
||||||
|
|
||||||
|
Основа проверки: перечитаны ADR-0004/0005 и обе спеки; код прочитан помодульно;
|
||||||
|
марковская модель путей прогнана симуляцией на 300 тыс. визитов; прогнан весь
|
||||||
|
набор тестов (113 passed); происхождение обёртки `try→fresh` прослежено по git.
|
||||||
|
|
||||||
|
### Прогноз по находке A не оправдался — петля её поймала
|
||||||
|
|
||||||
|
Handoff предсказывал, что петля пропустит ссылочную целостность при
|
||||||
|
`restore_state` («слепые зоны одной линии Кодекс скоррелированы»). На деле:
|
||||||
|
|
||||||
|
- висячая ссылка визит→пользователь ловится валидатором формы (`state.py:88`);
|
||||||
|
- висячая ссылка пользователь→словарь (неизвестный `seed_click_id`) валидатору
|
||||||
|
формы недоступна, но петля **в коммите задачи 06** (`640050e`) добавила обёртку
|
||||||
|
`try→fresh` вокруг `restore_state` в сервисе **и** написала регрессионный тест
|
||||||
|
`test_invalid_restored_v2_state_starts_fresh` (профиль с `missing-click-id`).
|
||||||
|
Это совпадает с разделом «Наблюдения по задаче 06»: и саморевью worker-а, и
|
||||||
|
отдельный reviewer независимо нашли «битый v2 проходит `from_dict_safe`, но
|
||||||
|
роняет `restore_state`».
|
||||||
|
|
||||||
|
Вывод: многоролевой цикл (worker + саморевью + отдельный reviewer) **поймал**
|
||||||
|
ровно тот класс дефекта, который ставился как главный индикатор эксперимента.
|
||||||
|
Прогноз о скоррелированной слепоте по этому пункту ошибочен.
|
||||||
|
|
||||||
|
### Что внешний взгляд всё же добавил
|
||||||
|
|
||||||
|
Дефекты, дожившие до внешнего ревью, оказались **не точечными, а сквозными** —
|
||||||
|
их не пинит ни один тест, и каждый по отдельности «проходит»:
|
||||||
|
|
||||||
|
- **Расхождение живого и восстановленного путей.** Живой визит берёт
|
||||||
|
браузер/локацию из *случайной* сид-сессии и `event_id` = `_new_uuid`
|
||||||
|
(`generation.py`), восстановленный — из сид-сессии *профиля* и `event_id` =
|
||||||
|
`uuid5` (`runtime.py`). У визита, пережившего рестарт, атрибуты «доезжающих»
|
||||||
|
событий меняются на середине. Инвариант «один визит — однородный контекст»
|
||||||
|
нарушается на стыке двух путей, который ни один тест не сводит вместе.
|
||||||
|
- **Форма распределения длины визита.** Среднее (10.7) и конверсия в
|
||||||
|
`/confirmation` (27%) на цели, воронка монотонна — это тесты проверяют и
|
||||||
|
подтверждают. Но *форма* дальше от сида: спайк 16% на длине 2 (форс минимума в
|
||||||
|
2 события убирает визиты-отказы из одного события, которые сид допускает),
|
||||||
|
~6.6% визитов срезаются о потолок 30, медиана 8 сидит на нижней границе
|
||||||
|
тестовой полосы 8–12. Тесты пинят средние и пороги, но не форму распределения.
|
||||||
|
|
||||||
|
### Уточнённая гипотеза
|
||||||
|
|
||||||
|
Главный индикатор A был *локальным* дефектом — падение в одной точке на битом
|
||||||
|
входе; того же семейства, что и прочие находки задачи 06 (раздутый снимок,
|
||||||
|
неполная валидация). Такие вещи дисциплинированный многоролевой цикл ловит
|
||||||
|
хорошо. А выжили до внешнего ревью свойства **межмодульные** (инвариант поверх
|
||||||
|
двух путей кода) и **распределительные** (форма, а не среднее) — ровно там, где
|
||||||
|
слабы и ревью внутри одной линии, и покритериальные тесты.
|
||||||
|
|
||||||
|
Отсюда уточнение к открытому вопросу «когда нужен отдельный reviewer»: ценнее
|
||||||
|
всего reviewer **другой родословной**, и именно там, где (а) свойство тянется
|
||||||
|
через несколько модулей/путей, либо (б) корректность распределительная (форма),
|
||||||
|
а не одно утверждение. Для точечных дефектов на входе хватает саморевью и
|
||||||
|
отдельного reviewer той же линии.
|
||||||
|
|
||||||
|
### Побочно подтвердилось
|
||||||
|
|
||||||
|
Разделение двух линий сработало: ADR-0005 (модельные часы ×K) остался решением
|
||||||
|
на бумаге, код петли честно держался реал-тайм-модели, нечаянного переплетения
|
||||||
|
линий нет. Процессное решение «не мешать брейншторм времени с петлёй 06/07»
|
||||||
|
выдержало.
|
||||||
|
|
||||||
## Связанные артефакты
|
## Связанные артефакты
|
||||||
|
|
||||||
- `.scratch/handoffs/2026-06-11-subagent-coordinator-experiment.md` —
|
- `.scratch/handoffs/2026-06-11-subagent-coordinator-experiment.md` —
|
||||||
|
|||||||
Reference in New Issue
Block a user