Как устроено

Один инвариантный цикл, вокруг которого собрано все остальное: места и роли, раунды и фазы, очередь решений со сроками, постоянные правила, общие метрики и ретроспектива в конце.

Места и роли

Асимметричные места и уникальные наборы глаголов действий
Асимметричные места и уникальные наборы глаголов действий

Сценарий описывает четыре места. У каждого свой набор глаголов: инженер может investigate, mitigate, fix; продакт – commit-scope, prioritize, talk-to-stakeholder; инженерный менеджер – protect-team, open-requisition, set-standards.

Полномочия асимметричны намеренно. Ни одно место не закрывает карточку в одиночку: чтобы снять давление, глаголы приходится соединять в цепочку, а значит договариваться. Разговор в команде производит именно это, а не механика чата.

Асимметрична и информация. Одно и то же событие показывается разным местам по-разному: кто-то видит график ошибок, кто-то раздраженного клиента, кто-то грязный кусок кода.

Незанятые места ведет движок. У каждого сценария указан диапазон игроков – во всех пяти поставляемых сценариях это от одного до четырех. Свободные места закрывают боты: при закрытии раунда бот ходит по цепочке правил за свое место, поэтому неполный стол не встает колом. Одно место в каждом сценарии помечено как «не для бота». Это место ведущего игрока, и отдать его боту значило бы отдать боту сам вопрос сценария.

Раунды и фазы

Раунд – атомарная единица игры, и он не привязан к настенным часам: раунд закрывается, когда места отметились, а не когда истекло реальное время.

Один раунд: приходит давление → каждое место видит свой срез → обсуждение → игроки тратят емкость на действия → движок применяет детерминированные эффекты → метрики двигаются → следующий раунд.

Фазы – это ворота между раундами. У фазы есть цель и условие перехода, записанное выражением над метриками: в «Обещании на квартал» фаза commit заканчивается только при scope <= 55. Такое условие нельзя пройти усердием – только решением, что вы не делаете.

Место отметилось, если оно сходило, спасовало, оставило постоянное распоряжение на этот случай или ушло в тайм-аут. Отсутствие никогда не блокирует остальных, оно только выбирает более слабый путь разрешения.

Решения со сроком

Уровни решений и радиус поражения: Solo, Quorum, Gate
Уровни решений и радиус поражения: Solo, Quorum, Gate

Решения в игре – объекты, а не реплики. Все, что подняли в течение раунда, попадает в очередь: истекающие распоряжения, взведенные задержанные эффекты, перерасход по начатой работе, вопросы на кворум.

Каждый пункт несет свои варианты, срок в раундах, правило, кто именно его закрывает (владелец решает, кворум, консенсус), и список мест, у которых есть относящаяся к делу закрытая информация. Просрочка не ставит игру на паузу: пункт разрешается сам, по худшему варианту.

Отложить – это тоже ход. Он записывается, и цепочка переносов всплывает на ретроспективе.

Действия разделены по радиусу поражения:

УровеньЧто этоКогда разрешается
Soloлокальное, обратимое: разведать, подготовить, мелкая правкав любой момент, никого не спрашивая
Quorumсреднее: принять политику, перетасовать бэклогасинхронное согласие N коллег
Gateнеобратимое: релиз в прод, крупная трата, наемтолько на общей планерке

Постоянные правила

Есть два вида правил, которые продолжают действовать без вас.

Постоянные распоряжения – личные. «Если сработал инцидент, сначала митигируем». «Согласовывать траты на инфраструктуру до X». «Мой голос держит Ops, пока меня нет». Уходя, вы оставляете правило, и оно ходит за вас.

Лучшая драма в модели живет ровно здесь: распоряжение может оказаться неверным для той ситуации, которая на самом деле пришла. «Я же сказал: всегда откатывать» – а этот откат снес миграцию. Присутствующая команда живет с правилом отсутствующего, пока не наберет кворум, чтобы его перебить.

Политики – командные. Их принимают, правят и отменяют на управленческой планерке, и они лежат в реестре, который видно всем. Правило контента здесь жесткое: у политики обязана быть сцепленная обратная сторона. Политика, у которой одни плюсы, в сборку не проходит.

Метрики

Метрики общие. Когда разработчик срезает угол ради даты, качество падает у всех; когда продакт переобещал, доверие растет сейчас, а давление по скоупу давит на всех в следующем раунде.

Мягкие метрикиtrust, morale, quality, scope, techDebt, outcome. Их двигают события и действия; падение одной из них до пола – условие проигрыша.

Жесткие ресурсы тратятся, а не подталкиваются: емкость (действий в раунд), дедлайн (часы, которые идут всегда) и то, что в конкретном мире действительно кончается. Это намеренно не универсальный кошелек: у стартапа кончаются деньги, у большой компании – одобренные ставки и внимание руководства.

Свои метрики у сценария. Сценарий может объявить собственные: consistency в «Долге дизайна», bench во «Второй команде», conversion и revenue в «Тисках роста». Объявление и делает имя легальным в условиях, эффектах и триггерах этого сценария.

Емкость связана с начатой работой: свободная = общая − занятая. Именно эта связь создает главный повторяющийся выбор игры: снять людей с начатого ради пожара или дать гореть.

Ретроспектива

Сессия заканчивается ретроспективой, и это не приложение к игре, а то, ради чего она игралась.

Ретроспектива собирается из журнала событий: что происходило, какие решения вы приняли и по какому пути они закрылись, что вы откладывали и сколько раз, как двигались метрики и какими цепочками одно вытянуло другое. Отдельно идет личный срез: только ваши действия и только ваши данные, чужие скрытые мотивы в него не попадают.

Есть жесткое правило: никаких нравоучений. Формулировки вроде «урок здесь в том, что» или «в реальной жизни» запрещены на уровне валидации. Единственный вывод, который ретроспектива формулирует, обязан быть привязан к этой сессии («мы срезали качество, и оно вернулось»), а не к продуктовому менеджменту вообще.

Что делает языковая модель, а что – движок

Архитектура системы: детерминированное ядро движка и нарративный слой LLM
Архитектура системы: детерминированное ядро движка и нарративный слой LLM

Здесь легко ошибиться в обе стороны, поэтому формулирую точно.

Игра полностью работает без языковой модели. Без ключа шлюз деградирует, и каждая сессия идет на скриптовом уровне. Скриптовый уровень – не заглушка: он обязан уметь провести целую сессию в одиночку. Планерка становится шаблонной сводкой, повестка списком, ретроспектива таймлайном из журнала событий с посчитанным движком исходом. Хуже как текст, но это по-прежнему сессия с началом, серединой и разбором.

Модель никогда не меняет состояние игры. Любой ее вывод приходит на сервер как предложение и проходит проверку правилами до того, как что-либо будет записано. Голоса считает движок, права решения применяет движок, исход фиксирует движок. Модель повествует, ведет разговор и компилирует предложения, но никогда не закрывает решение.

Что модель добавляет: язык. Связный рассказ между тактами планерки, реплики персонажей, которых ведет движок, формулировку посчитанных чисел человеческими словами и глубину разбора на ретроспективе.

Так что точная формулировка – не «игра на языковой модели», а «детерминированный движок, поверх которого модель говорит».