Как собрать

OpenClaw 2026.9.8: `watch` и `rerun --child` для Full Release Validation

Как следить за упавшей Full Release Validation через `frv watch` и перезапускать конкретного ребёнка через `rerun --child`, не трогая весь прогон.

· 4 мин чтения

Коротко

  • В OpenClaw 2026.9.8 в frv добавили watch и rerun --child с --max-attempts для точечной работы с упавшим дочерним прогоном.
  • watch читает строки диспатча родителя и сообщает о переходах попыток и упавших джобах один раз, без повторов после рестарта.
  • rerun --child отправляет один запрос rerun-failed-jobs, отказывает сверх --max-attempts (по умолчанию 2) и не выполняет финальную герметизацию.

Сверено с документацией OpenClaw 2026.9.8, 3 октября 2026.

В OpenClaw 2026.9.8 к команде pnpm frv добавили watch и rerun --child. Они позволяют наблюдать за прогоном и перезапускать конкретный дочерний прогон, тогда как финальная герметизация по-прежнему остаётся за continue --failed.

Что нужно заранее

  • OpenClaw 2026.9.8: поведение watch и rerun --child появилось в этой версии.
  • Идентификатор родительского прогона Full Release Validation (<parent-run-id>).
  • Ключ дочернего прогона (normalCi, pluginPrerelease, releaseChecksIndependent) или его run-id. Эти данные берутся из вывода команды статуса с флагом --json.
  • Node и pnpm для запуска pnpm frv.

Шаг 1. Проверить состояние родителя

Перед watch зафиксируйте стартовое состояние прогона командой ниже.

pnpm frv status --run <parent-run-id> --json

Шаг 2. Запустить frv watch

watch разбирает строки журнала диспатча родителя вида Dispatched <workflow>: <url> (attempt N), находит по ним дочерние прогоны и сообщает о каждом переходе попытки и упавшем задании один раз, с метками раннера. Временные сбои GitHub повторяются при следующем опросе.

pnpm frv watch --run <parent-run-id> [--once] [--json]

Локальное состояние лежит под $TMPDIR/openclaw-frv/. После рестарта процесса watch подхватывает его и не повторяет уже показанные события.

Шаг 3. Точечный перезапуск ребёнка через --child

rerun --child ждёт один упавший дочерний прогон, отправляет ровно один запрос rerun-failed-jobs, проверяет, что в новой попытке нет дубликатов заданий, и пишет строку аудита. После старта новой попытки команда возвращается: финальную герметизацию по-прежнему выполняет continue --failed.

pnpm frv rerun --run <parent-run-id> --child <child-key|run-id> [--max-attempts 2]

--max-attempts по умолчанию равен 2, то есть допускает один повторный запуск. Если ребёнок уже превысил порог, команда откажется его перезапускать. Если упавший потребитель привязан к зелёной попытке производителя, команда перезапустит производителя и его зависимых, а не только самого потребителя.

Шаг 4. Закрыть блок через continue --failed

Если после повторного запуска дочерний прогон остался красным, сначала посмотрите frv status. Иначе continue --failed сам ретрайнет оставшихся блокеров. Когда других блокеров нет, закройте прогон командой ниже: она перезапускает только упавшие дочерние задания по мере их завершения, а в конце один раз перезапускает родительский сборщик.

pnpm frv continue --failed --run <parent-run-id>

Для normalCi можно вместо этого зафиксировать флейк через full-release-flake-classification.yml с доверенного main, а затем выполнить continue --failed.

Как проверить

  • pnpm frv status --run <parent-run-id> --json показывает свежий список дочерних попыток и их состояние.
  • В выводе watch нет повторов одной и той же попытки после рестарта процесса.
  • После rerun --child появилась новая попытка дочернего прогона, в ней нет дубликатов заданий, в журнале есть строка аудита от rerun --child.
  • pnpm frv continue --failed --run <parent-run-id> отработал без ошибок.
  • pnpm frv verify --run <successful-parent-run-id> прошёл на итоговом успешном parent.

Если что-то пошло не так

  • rerun --child отказывается запускаться из-за лимита попыток. Дочерний прогон уже превысил --max-attempts (по умолчанию 2), дальше повторять нельзя: разбирайте исходную причину.
  • Повторный запуск выглядит успешным, но родительский прогон всё равно красный. Сначала frv status, потом точечный повторный запуск по оставшимся блокерам. Бездумно запускать continue --failed не стоит, он сам их ретрайнет.
  • Получили неоднозначный временный ответ от GitHub. Контроллер выполняет сверку только для чтения, пока не появится новая попытка или не истечёт бюджет, и не повторяет изменение. Подождите и сверьте frv status с реальными попытками на GitHub перед новым повторным запуском.
  • continue не подхватывает прогон. Значит, его неизменяемый план старше формата с учётом попыток, нужен свежий Full Release Validation: контроллер не восстанавливает старое состояние и не запускает заменяющий родительский прогон.