Контур производства: конвейер агентов от заявки до релиза¶
В П9 методология описывает команду агентов вокруг одного Кортекса. Контур производства — самая развёрнутая реализация этой идеи на стороне разработки: заявка проходит стадии, а агенты и человек работают через общее состояние, не вызывая друг друга напрямую.
Где реализовано
Публичные репозитории poh-issue-agents (конвейер на Temporal, ADR-журнал), poh-howtodemo-agent, poh-pr-agents, poh-backlog-skills, poh-memory-engine, poh-okr-agent, poh-sprint-agents, poh-bft-writer, harness-memory-base. Протокол агентов — в профиле организации (.github).
Зрелость: ядро конвейера и протокол — в эксплуатации на демонстрационном стенде; приёмка, гигиена беклога, память и саморефлексия — прототипы; навыки OKR и спринта — в эксплуатации. Стадии разработки и релиза в текущей сборке «Коробки БФТ» вынесены за скобки.
Конвейер стадий¶
Заявка ведётся как долгоживущий процесс; у каждого перехода записан инициатор (агент, человек, внешний). Человек вмешивается в заранее названных точках.
создана → классификация → бизнес-анализ → системные требования → проработана → готова к разработке
→ разработка → PR → ревью → слияние → тесты → релиз
Боковые состояния (спам, дубль, ответ, пропуск, эскалация, срыв) — не тупики. Терминальны только «релиз» и «отмена». Контур не закрывает дубли сам: ставит метку. Следствия для методологии: конвейер линеен с возвратами по стоп-слову, тогда как Und-Id-Ex (раздел 11) итеративен; точки передачи реализуют идею гейта, но порог в них бинарный — «артефакт есть или нет» — без ступеней.
Протокол агентов v1¶
Контракт между независимыми агентами — словарь меток и соглашение об именах веток.
| Правило | Суть |
|---|---|
| R1 | Одна метка — один писатель |
| R2 | Состояние читается на старте; порядок событий не гарантирован |
| R3 | Каждая «парковка» (ожидание человека) имеет дедлайн |
| R4 | Рубильник agents:off проверяется до первого вызова модели |
| R5 | Стоп-метка одного агента уважается остальными |
| R6 | Провенанс: у артефактов агента есть метка происхождения и сквозной ключ корневой заявки |
| R7 | Потолок глубины: follow-up второго уровня идёт сразу человеку |
| R8 | Агент не пишет код (кроме выделенной стадии разработки) |
Единый префикс needs-human:* даёт одну выборку очереди к людям и одну цифру для наблюдения. Замер: 221 из 267 открытых задач организации были заведены самим контуром — отсюда правило R7 и принцип «находки строками, а не новыми заявками». Это перенос правила «строка без ссылки — не факт» на артефакты самих агентов.
Гейт «критерий приёмки прочитан»¶
Разработка не стартует без критерия «готово». Перед запуском контур ищет блок HowToDemo; нет — публикует два–три кандидата «было — стало» и ставит заявку на парковку. Ответ человека — единственная команда ответа (один способ на любой вопрос); критерий читается одним модулем (два читателя однажды разошлись).
«Модель извлекает — код считает»¶
Любое число, влияющее на решение, считает детерминированный код; модель только извлекает факты по рубрике.
| Где | Как |
|---|---|
| Приоритет заявки | Модель выставляет влияние, срочность, снижение риска (1–5) и трудоёмкость (1–10); код считает (влияние+срочность+риск) × множитель цели / трудоёмкость. Пороги P0 ≥ 3,0, P1 ≥ 1,8, P2 ≥ 0,9. Баги с потерей данных или денег идут в P0 мимо формулы |
| Оценка | Модель извлекает факты, код считает PERT, надбавки за отсутствие критериев, зависимостей, контракта (0,15–0,3), риски по диапазонам |
| Приёмка HowToDemo | Вердикт — чистый код: действие исполнено, ожидание совпало, улика собрана |
| Квартальная страница OKR | Исход каждого KR и итог считает скрипт из JSON: одинаковый JSON — байт в байт одинаковая страница |
| Блокеры | Дни ожидания считает скрипт, агент только раскладывает по случаям |
Агент не называет число; применение отвергает число, которого нет в фактах, чужой ключ задачи и устаревший хэш фактов. Практика уточняет формулировку методологии: «считает не LLM, а детерминированный код — кто бы его ни запускал».
HowToDemo-приёмка¶
Сценарий фиксируется указателем с хэшем: источник неизменяем, подмена после фиксации — отдельная строка отчёта; берётся первая редакция требований («о чём договорились»). Один вызов модели переводит шаги в план http / cli / assert / unmapped; unmapped — штатный исход «нужен человек». Стенд — эфемерный контейнер из конкретного SHA. Улики коммитятся в отдельную ветку; метки demo:passed | partial | failed | no-scenario. Это исполняемая форма проверки «покажи, где проверить» из раздела 13 и усиление ступени «демо» до проверки на живом сервисе.
Диагноз красноты: «своя» или «чужая»¶
Агент не отвечает за красные тесты, которые не ломал. Базовая линия снимается на отдельной чистой рабочей копии (никогда не git stash), мигающие тесты не вменяются, сравниваются множества имён из отчёта тестов. Только своё возвращается агенту на повторный заход (не больше одного); чужое — обычный PR с оговоркой; сорванный прогон — черновой PR «СОРВАЛОСЬ» с причиной. Принцип: механизм проверки не имеет права уничтожать то, что проверяет.
Круг правок со стоп-словом¶
Ревьюер размечает замечания blocker | major | nit (при сомнении класс понижается). Выход по порядку: нет blocker и major → успех; отпечаток набора замечаний совпал (сходство ≥ 0,8) → петля; три круга исчерпаны → принудительное закрытие. Правки ограничены файлами исходного диффа и 30% его объёма. Ожидание человека до 72 часов не расходует круги. PR с открытым blocker не вливается никогда. Это форма «осознанного отказа» вместо бесконечного насыщения: порог калибруется по данным после тридцати PR.
Автоматическое ревью и принцип «не молчать»¶
Ревью, описание и предложения на каждом PR; сбой всегда виден. Уроки: инструмент ревью на ограничении запросов завершается успешно, оставляя заглушку «Preparing review…» — исход определяется по выводу; ревью видит только дифф и повторяет требования, существующие вне диффа; состояние утекает между прогонами. Самохостинговый слой надёжности (очередь с гарантией доставки не реже одного раза, дедупликация, предохранитель, сторож) оказался избыточным: в эксплуатации был только режим через Actions. Урок организации: сначала готовый инструмент, потом кастом (решения и OSS).
Гигиена беклога¶
Периодический аудит всего беклога: хвосты, сироты, дубли, протухшие приоритеты; решает человек.
- Правила — данные (
catalog.yaml,thresholds.yaml): у каждого правила идентификатор, серьёзность, действие, ожидаемый эффект, зрелость, источник. Читает любой потребитель на любом языке. - План с галочками:
[x]утвердить ·[-]явный отказ (постоянное подавление) ·[ ]не решено (вернётся). - Проверка после исполнения выносит вердикт: сделано · без эффекта · не применено; невыполненные утверждённые действия возвращаются в раздел «Обещано, не сделано» — это ведомость обещаний.
- Потолок 50 действий за прогон; операции удаления в словаре действий нет; пакет не делает сетевых вызовов; режим «тени» копит разметку без права утверждать.
- Пороги из замера на 727 задачах: застой истории 60 дней (багов 30), описание от 20 слов (около 40% задач короче, около 27% без описания), здоровый беклог — менее 20% элементов старше 90 дней и менее 5% старше 180.
Расхождение с методологией: PAF «упраздняет беклог в пользу банча», а практика строит инструмент его гигиены (расхождения).
Движок памяти¶
poh-memory-engine превращает хранилище Markdown-узлов в граф знаний. Истина — Markdown в git; граф и вектор — производные и пересобираемые. Гейт: ноль «workslop» (узел без источника), ноль висячих рёбер, достижимость от KR (оракул связности: без рёбер «владеет» достижимость падает со 100% до 15%). Уверенность — число 0–1, сроки годности по типу узла (нормативное 365 дней, эмпирическое по рынку и потребителю 90, рост 60), свежесть p = возраст / срок. Расхождения с методологией: распад линейный, нет частоты изменений и правила слабого звена, нет ступеней. Прототип, 21 открытый вопрос в бэклоге.
Саморефлексия контура¶
harness-memory-base: правила курирует человек и меняет только через PR; память пишет машина в отдельной ветке; «машина не должна уметь менять то, чем её поправляют». Сигналы дня собираются без модели (PR слит, тесты, число кругов, выживание строк, переписывание человеком), судья с обязательным якорем на каждое суждение (неразрешимый якорь отбрасывается кодом). Урок проходит жизненный цикл proposed → active → confirmed / regressed / dormant / superseded / retired; подтверждается при пяти итерациях или 30 днях, опровержение приоритетнее; кандидат принимается только со способом проверки и доказательными эпизодами. Недоступный сигнал не считается нулём — вес перераспределяется. Есть контрольная выборка: каждая N-я задача идёт без правил. Петлю не замыкает сам («петля оптимизирует сигнал, а не цель»). Тот же шаблон независимо воспроизведён в плане, подтверждении, записи и сверке.
Навыки OKR и спринта¶
OKR → план → экватор (poh-okr-agent): ретро прошлого квартала → рассказ PO (можно голосом) → драфт плана → условия, риски, зависимости → этапы по ролям → Jira (задачи только после «да») → презентация → экватор. Источник истины этапа — JSON, страницу строит скрипт; линтер не даёт «принять» документ с неуточнённым местом, этапом без исполнителя или отменой без причины. PBV (ценность 1–9; «9 — коммитмент с дедлайном, не более двух на квартал») легко спутать со ступенью CP — это разные шкалы. Это частичное воплощение кейсов П3-бис и П3-квинт: нет двух уровней committed/target, правила 70% и множителей неопределённости, автоматического письма «не берём».
Скрам-мастер-агент (poh-sprint-agents): отчёт спринта, бизнес-колода, блокеры за квартал и месяц, инсайты, статус. Принцип «данные собирают сборщики, а не модель»: изменённый сборщик не запускается, пока человек не сверит выборку.
Приёмы, которые стоит перенять¶
- Дедлайн на каждой парковке и «ожидание — состояние», а не пауза без срока.
- Отказ, ради которого написан тест: регрессионный тест привязывается к конкретному реальному отказу; в таблице «отказов, которые выглядят как работа» — пустой дифф, заглушка ревью, мусор от харнесса, отсутствие PR.
- Одна команда ответа человека на любой вопрос агента.
- Каждое решение о стоимости — в ADR, с рассмотренными вариантами.
Что осталось за скобками¶
Ступеней CP 2–9 в контуре нет нигде: есть четыре несопоставимые шкалы (ранги якорей R1–R4, confidence 0–1, PBV 1–9, оценка итерации 0–1). Контур производства подтверждает принципы методологии (гейт, провенанс, детерминированный расчёт, правила меняет человек), но не её механику уверенности.