Loom — декомпозиция монолитного Builder'а на конвейер специалистов
Почему мы заменили одного перегруженного AI-агента пятью специализированными ролями — и назвали всё это ткацким станком.
Один AI-агент пытался делать всё сразу: проектировать FSM, перечислять действия, собирать каждый ActionFlow, подбирать пути хэндлеров, конфигурировать плагины, расставлять переходы — всё в одной сессии с 100KB системного промпта и 50-200KB входного контекста. Результат был предсказуем: рассеивание внимания, осцилляция ошибок и ноль играбельных игр.
ADR-019 заменил монолитного Builder’а конвейером из пяти специализированных ролей, собирательно названных Loom (по ткацкому станку):
Draftsman (Чертёжник) — читает Rules-Markdown, проектирует FSM и список действий на уровне контрактов. Производит Draft — структурированный промежуточный DSL. Не трогает JSON.
Warper (Основщик) — по Draft строит скелет графа: все ноды состояний, переходы, конфиги плагинов, пустые заготовки действий. Один graph_update.
Shuttle (Челнок) — берёт одно действие из Draft и строит его ActionFlow. Не знает про другие действия. Возвращает graph_patch с одной нодой custom_action. N сессий Shuttle работают параллельно.
Finisher (Доводчик) — сверяет собранный граф с Draft. Чинит сиротские переходы, несматченные события, пустые availableActions.
Inspector — рантайм smoke-test (уже существовал, роль не меняется).
Draft — ключевой артефакт — третий DSL в системе, сидящий между Rules-Markdown и GraphDoc. Это spec-файл между Архитектором и Исполнителем, но для AI-ролей. DraftValidator (механический, без Zod) стоит вратами между фазами.
Когнитивная нагрузка на сессию упала с 200KB до 8-15KB. Параллельное выполнение Shuttle означает, что 15 действий занимают время одного, а не пятнадцати. И если Shuttle сломает одно действие — ретрай только его.
Это была архитектурная ставка, которая сделала сложные игры достижимыми. Не лучший промпт — лучшая декомпозиция.