OpenClaw на фронтенде в 2026 году:
Cloudflare Pages Deploy Hook → смоук на Mac, аудит security headers и обратная передача сводки сборки
2026-openclaw-cloudflare-pages-deploy-hook-remote-mac-howto.htmlДля кого: команды на Cloudflare Pages, которые борются с «липким» edge-кэшем, регрессиями CSP/HSTS и наслоением Workers после деплоя. В отличие от сценария с Netlify Deploy Hook, здесь — нативная цепочка CF: план инвалидации кэша, diff файла _headers, пакетный curl по списку URL, оркестрация на шлюзе OpenClaw и дайджест сбоев рядом с метриками сборки в PR. Дополнительно сверяйтесь с преддеплойным смоуком и приёмкой Service Worker в Safari, если HTML оборачивает SW.
01 Почему одного Deploy Hook мало
Deploy Hook означает «сборка закончилась», а не то, что CSP, HSTS и Permissions-Policy пережили слияние Workers и статического _headers на периметре.
- Задержка инвалидации. Без целевого purge или версионирования имён ассетов смоук в CI может видеть свежие артефакты, а пользователь — старый документ с edge.
- Заголовки как совмещённая политика. Файл в Git не всегда совпадает с байтами ответа; нужен diff эффективных заголовков после выката.
- Реальность браузеров. Safari и Chromium по-прежнему расходятся по таймингу SW и партициям хранилища — честный прогон Playwright остаётся на удалённом Mac.
02 Netlify hooks и Cloudflare Pages hooks
Сигналы похожи; семантика edge — разная. Ниже — краткая матрица, чтобы не путать с Netlify-цепочкой.
| Тема | Акцент Netlify | Акцент Cloudflare Pages |
|---|---|---|
| Контракт хука | Сборка завершена; preview URL — первый класс. | Проекты prod/preview; к хуку добавляют план purge и маршруты Workers. |
| Источник заголовков | Блоки netlify.toml. |
_headers в репо плюс правила в панели; нужен curl-diff с живым ответом. |
| Риск устаревания | Паттерны CDN зависят от класса ассета. | Явные API инвалидации и теги; HTML и хэшированные чанки раздельно. |
| Проверка | Прогрев GET и Playwright остаются валидны. | Добавьте пакетный curl по нескольким входным URL и цепочкам редиректов. |
03 Воспроизводимая цепочка в shell
Проверьте X-Hook-Secret, поставьте в очередь OPENCLAW_RUN_ID, ответьте 202 Accepted; тяжёлую работу выполняйте на Mac.
- Контекст деплоя: экспортируйте
GIT_SHA,CF_PAGES_COMMIT_SHAили метаданные провайдера,DEPLOYMENT_IDи публичныйPAGES_URLдля тестов. - Инвалидация кэша: точечный purge для HTML-оболочки и нефингерпринтного JSON либо опора на контент-хэши в именах файлов бандлера.
- Прогрев с backoff: цикл
curl -fsS -o /dev/null -w '%{http_code}' "$PAGES_URL/healthz"до200или дедлайна; при429после волн purge — джиттер между попытками. - Diff правил заголовков: снимите предыдущий тег, выполните
diff -uдля_headers, сохраните текстовый артефакт рядом со сборкой для аудита. - Пакетный curl: список URL построчно через
xargs -n1; по каждому —curl -sSIи проверкаstrict-transport-security,content-security-policy,permissions-policy; падение, если пропала обязательная директива. - Смоук Playwright:
npx playwright test tests/smoke --project=webkit --project=chromiumпротивPAGES_URLпосле прохождения curl-гейтов. - JSON сводки:
.openclaw/reports/build_summary.jsonсschema: "build_summary/v1", таймингами, строками упавшего curl, диффом заголовков и ссылками на trace; POST сIdempotency-Key: ${GIT_SHA}:${DEPLOYMENT_ID}:cfpages.
04 Шлюз OpenClaw: оркестрация и дайджест сбоев
Шлюз OpenClaw выстраивает curl_batch, headers_diff, playwright_smoke и останавливается на первом ненулевом коде выхода. Пишите NDJSON с полями phase, attempt, http_status, openclaw_run_id.
В дайджесте ошибок фиксируйте первый плохой URL, отсутствующий заголовок, id purge и deployment id. Успешные прогоны всё равно логируйте cf_cache_status, чтобы доказать, что прогрев получил свежие байты.
05 Операционные ограничения
Зафиксируйте в runbook: список URL, префикс или тег; полный purge зоны — последний резерв из‑за лимитов API в плотных релизных окнах.
Храните unified diff _headers рядом с deployment id: ревьюеры безопасности сопоставляют намерение репозитория с живыми ответами curl.
Ограничьте OPENCLAW_GATEWAY_TOKEN только POST сводки и API очереди; токены Cloudflare API не кладите в клиентские бандлы и публичные логи.
06 FAQ: хуки, кэш и заголовки
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Смоук то проходит, то нет | Гонка завершения purge или разные POP. | Увеличьте дедлайн прогрева, логируйте cf-ray и age, повторите curl-батч до Playwright. |
| CSP только в prod «пропала» | Другое правило перекрывает статические заголовки. | Сравните curl -sSI для apex и www; проверьте Workers на дублирующую инъекцию заголовков. |
| Хук отвечает 403 | Сменился секрет или неверный slug проекта. | Пересоздайте URL хука, обновите vault, удалите устаревшие endpoint из внутренних заметок. |
| 429 от API Cloudflare | Всплеск purge или вторичные лимиты. | Шардирование purge, backoff с джиттером, кэш метаданных деплоя на несколько минут. |
Заменяет ли curl-батч Playwright?
Нет. Curl доказывает транспорт и редиректы; браузер по-другому применяет CSP и mixed content. Используйте curl как быстрый гейт, затем Playwright для DOM и хранилищ.
Где всё ещё полезна статья про Netlify?
Там — эталон гигиены хука, полей NDJSON и идемпотентности callback. Подставьте URL провайдера Pages и добавьте шаги purge плюс _headers из этого руководства.
Запускайте цепочки Cloudflare Hook на реальном Apple-железе
Держите Deploy Hook на стабильном runner с Safari и Chromium, стримьте сводки OpenClaw и не привязывайте релизы к ноутбуку. Тарифы и помощь — без обязательного входа; когда edge-релизы перерастают минуты CI — аренда или покупка удалённого Mac под автоматизацию и постоянные webhook-триггеры.