Рабочие процессы и сохранённые результаты
Рабочий процесс представляет работу, которая должна оставаться согласованной через несколько ходов модели, терминалов или делегированных агентов. Он не позволяет принять финальное сообщение провайдера за завершение более крупной миссии.
Работа верхнего уровня и делегированная работа
Рабочий процесс верхнего уровня принадлежит агенту или supervisor, запущенному для миссии owner. Делегированный рабочий процесс принадлежит дочернему агенту, которому назначена одна ограниченная задача.
Top-level: "Prepare the release candidate"
├── Delegated: "Fix the statistics parser"
├── Delegated: "Review operator authorization"
└── Owner gate: "Approve public publication"У каждого рабочего процесса собственные текущий логический ввод и состояние завершения. Исполнитель может завершить свой делегированный рабочий процесс, пока рабочий процесс верхнего уровня остаётся открытым.
Assign и handoff
Assign запускает независимую ограниченную работу и позволяет родителю продолжить. Результат дочернего агента доставляется позднее. Это удобно для параллельного исследования, реализации или проверки.
Handoff передаёт одну ограниченную задачу и ожидает её проверенный результат, прежде чем родитель продолжит. Это удобно, когда следующий шаг родителя прямо зависит от ответа.
Обе формы сохраняют идентичность родителя/дочернего агента и сохранённый результат. Ни одна не даёт дочернему агенту более широких полномочий owner, чем родитель явно делегировал.
Временный отказ допуска до запуска, например из-за исчерпанной ёмкости рабочего контекста, записывается как недопущенное, а не как выполненное назначение. Один и тот же логический эффект можно повторить, когда ёмкость станет доступна; после допуска запуска дочернего агента или когда его исход становится неопределённым, обычная защита от дубликатов остаётся в силе.
Жизненный цикл результата
Task admitted
↓
Child works
↓
Structured result recorded
↓
Result delivered to parent
↓
Parent reads and incorporates it
↓
Parent acknowledges incorporation
↓
Eligible child resources can retireРезультат обычно включает краткую сводку, изменённые файлы, выполненные проверки, оставшиеся риски и блокеры. Это операционное свидетельство, а не замена изучению diff или вывода тестов.
Доставка имеет семантику «как минимум один раз». Если родитель перезапускается до подтверждения доставленного результата, ThreadCells может доставить его снова. Родитель должен использовать неизменяемую идентичность результата, чтобы не включить одну и ту же работу дважды.
Доставка Inbox выполняется FIFO в рамках терминала и привязана к точному рабочему процессу и логическому ходу, создавшим её. Ожидающая транспортировка — это состояние доставки, а не полномочие переместить полезную нагрузку или результат в другой рабочий процесс. Если её привязанный рабочий процесс больше не открыт, ThreadCells завершает такую устаревшую транспортировку и позволяет более новой открытой работе owner продолжить без перепривязки полезной нагрузки, рабочего процесса, доставки, квитанции или идентичности эффекта. Та же сверка выполняется после перезапуска и идемпотентна.
Завершение провайдера и завершение рабочего процесса
Ход провайдера заканчивается каждый раз, когда модель возвращает управление. В миссии всё ещё может оставаться допустимая работа: другой тест, ожидающий дочерний агент, проход исправления или шаг развёртывания.
Поэтому ThreadCells сохраняет рабочий процесс верхнего уровня открытым до одного из следующих явных исходов:
- миссия, авторизованная owner, завершена;
- действительно требуются ворота владельца;
- owner отменяет её;
- реальный невосстановимый сбой исчерпал свой ограниченный путь восстановления.
Повторяющиеся обычные финальные сообщения провайдера используют надёжное продолжение «один ход за раз» с ограниченной обратной задержкой. ThreadCells продолжает допускать следующий логический ход, пока рабочий процесс открыт. Если провайдер переходит непосредственно в состояние «Готов» вместо выдачи повторяемого завершённого фрейма, ThreadCells надёжно подавляет дребезг этого состояния между перезапусками и продвигает тот же открытый рабочий процесс; последующее наблюдение состояния «Обработка» отменяет временного кандидата «Готов». Прямой ввод owner и сохранённые результаты дочерних агентов сбрасывают счётчик отсутствия прогресса. В качестве защиты от платного цикла 65 последовательных финальных сообщений без надёжного прогресса переводят рабочий процесс в явные, видимые owner ворота. Завершение провайдера никогда не становится завершением миссии, а нормальное автономное продолжение не требует пробуждения owner.
Ворота владельца
Используйте ворота владельца, когда следующий шаг требует полномочий, которых миссия не предоставила. Хорошие примеры: публикация в публичный remote, предоставление новой сетевой службы, оплата ресурса или выбор между существенно разными семантиками продукта.
Не используйте ворота владельца только потому, что работа идёт медленно, не прошёл тест или закончился один ход провайдера. Сначала продолжите всю независимую допустимую работу.
Новое сообщение в редакторе задач — это решение владельца, возобновляющее допустимый резидентный рабочий процесс. ThreadCells сохраняет происхождение от ворот владельца и допускает ровно один раз точный сохранённый ход. Если запрос уже находился в очереди, когда предшественник исчерпал повторы транспорта, ход владельца атомарно повышается, а не остаётся скрытым под новыми воротами. Временный отказ из-за ёмкости или политики ресурсов оставляет явную сохранённую причину ожидания и не расходует бюджет сбоев транспорта.
Восстановление
После перезапуска ThreadCells восстанавливает владение рабочим процессом из сохранённого состояния. Доставленные, но не подтверждённые результаты остаются доступными. Ожидающий handoff можно возобновить с тем же дочерним агентом вместо запуска дубликата. Как только более новый логический ход допущен для открытого рабочего процесса, более старое ожидающее продолжение надёжно замещается и не может позже воспроизвестись как независимая работа после сжатия или прерывания.
Если управляемый дочерний агент достоверно завершил работу, не отправив результат, ThreadCells продолжает тот же ограниченный бюджет восстановления, даже когда последний отображённый статус провайдера устарел. После исчерпания бюджета система сохраняет результат жизненного цикла incomplete, один раз ставит его в очередь для чтения и подтверждения открытым родителем и отклоняет поздние отправки; успешный исход не выдумывается.
Сверка при перезапуске также повторно открывает последний рабочий процесс у ворот владельца, если у его отменённой головы транспорта уже есть более поздний явный преемник из редактора задач. Она повышает этот существующий ход без создания замены и никогда не использует это исправление для возрождения callback Inbox или терминалов в состоянии «Завершён».
Если выполнение провайдера или модели прерывается после допуска логического ввода, но до завершения необходимой работы, ThreadCells возобновляет её в новом сохранённом ходе-продолжении, а не воспроизводит исходную квитанцию. Завершённые эффекты остаются ограждёнными, владение выполнением провайдера переходит к возобновлённому ходу, а тот же неизменяемый результат дочернего агента и барьер завершения остаются доступны для включения и однократного подтверждения.
Прямое завершение, сбой, отмена, переход к воротам владельца, завершение дочернего агента и центральная отмена защищённого рабочего процесса ограждают ожидающие транспорты Inbox в одной транзакции базы данных. Это предотвращает терминальный переход, оставляющий обычное состояние доставки, которое может подавить более поздний ход owner.
Перезапуск сервиса той же сборки сохраняет совместимость управляющего соединения с провайдером. После продвижения сборки, меняющей привилегированный код оркестрации, старое соединение ограждается до того, как оно сможет создать эффект. Если активная идентичность временно недоступна при перезапуске, операция отклоняется без эффекта и повторяется после возврата сервиса. Для Codex ThreadCells при готовности запуска связывает точный диалог провайдера с управляемым терминалом и поколением runtime, затем сохраняет эту идентичность как полномочие на переподключение. Другие открытые rollout-файлы не могут сделать этот управляемый терминал неоднозначным. Отсутствующая, устаревшая, неверная или недоказуемая идентичность закрыто отклоняется до отправки провайдеру. Сохранённая идентичность возобновления делает перезапуск сервиса безопасным даже между выходом и повторным запуском. Транспорт ввода, переподключение и вывод из эксплуатации используют одно сохранённое требование изменения на терминал, поэтому текст нельзя вставить в промежуток оболочки переподключения, а устаревшее переподключение не может перезапустить терминал после победы вывода из эксплуатации. Уже сохранённый логический ход повторяется, а не заменяется.
Если терминал исчез, изучите записи рабочего процесса и результата перед повтором. Новый терминал не должен молча дублировать изменение, уже выполненное старым.
Конкретный пример
- Owner запускает supervisor, чтобы добавить возможность и проверить её.
- Supervisor назначает реализацию developer и продолжает изучать тесты.
- Developer коммитит изменение и записывает результат.
- ThreadCells доставляет его; supervisor читает diff и подтверждает включение.
- Supervisor назначает независимого reviewer.
- Reviewer находит блокирующую регрессию браузера и записывает свидетельство.
- Supervisor продолжает тот же открытый рабочий процесс верхнего уровня, запрашивает исправление и повторно выполняет приёмку.
- Только после принятой сборки и авторизованного развёртывания supervisor явно завершает рабочий процесс.
На шагах 3, 4 и 6 отдельные ходы модели закончились. Миссия — нет.
Распространённые ошибки
- Принимать финальное сообщение терминала за завершение верхнего уровня.
- Подтверждать результат до его прочтения или использования.
- Запускать заменяющего дочернего агента, не проверив наличие сохранённого предыдущего результата.
- Позволять двум дочерним агентам изменять один worktree.
- Использовать ворота владельца как обычную кнопку паузы.
См. Проекты и управляемые worktree об изоляции записи и Модель ёмкости и ресурсов о пределах допуска.
