2026 OpenClaw на практике:
Sentry release diff, кластеры и смоук-чек-лист на удалённом Mac
Нужно понять: даёт ли новый релиз в Sentry больше ошибок, чем последний «зелёный» деплой. На удалённом Mac сравните два релиза, сгруппируйте issues и отдайте OpenClaw короткий смоук-чек-лист. Ниже — учётные данные, curl+jq, кластеризация, вывод и FAQ; стыкуйте с преддеплойным веб-смоуком и разбором E2E-регрессий.
Три типичных провала без автоматизации
- Слепой релиз: команда смотрит только на сборку и Lighthouse, а новые ChunkLoadError или платежные сбои всплывают уже у пользователей.
- Шум в чате: десятки несгруппированных issues из Sentry не переводятся в конкретные смоук-шаги для дежурного.
- Разрозненные раннеры: Linux-CI и Mac-смоук дают разный таймлайн для аудита.
Матрица подходов к приёмке релиза
| Критерий | Только UI Sentry | Bash + jq на хосте | OpenClaw + отчёты |
|---|---|---|---|
| Повторяемость | Низкая | Высокая | Пути .openclaw/reports |
| Смоук | Слабая | Вручную из JSON | Агент уведомлений |
| WebKit | Нет | Отдельный шаг | Тот же Mac |
01 Минимальная конфигурация шлюза OpenClaw и учётных данных API
OpenClaw на удалённом Mac пишет в .openclaw/reports/<git-sha>/ вне Git. Токен Sentry — только чтение org/project и при необходимости событий.
Экспортируйте SENTRY_AUTH_TOKEN, SENTRY_ORG, SENTRY_PROJECT, при self-hosted — SENTRY_HOST (SaaS: https://sentry.io). Секреты не в Markdown: только счётчики, отпечатки и id issues. Имена переменных совпадают с CI.
- Файловая система: обёртка
scripts/sentry-release-gate.sh, вызываемая OpenClaw по расписанию или webhook. - Секреты: связка ключей macOS,
op injectили секрет CI — не коммитьте.envс токеном. - Таймауты: у curl задайте
--max-time, чтобы зависший API не блокировал цепочку перед деплоем.
02 Шаблон скрипта для выборки diff релизов Sentry
Фильтр release в query; diff — отпечатки RELEASE_CANDIDATE vs RELEASE_BASE. Шаблон: первая страница, limit=100, statsPeriod=14d; пагинацию по Link и MAX_PAGES добавьте при росте объёма.
#!/usr/bin/env bash
set -euo pipefail
: "${SENTRY_AUTH_TOKEN:?}" "${SENTRY_ORG:?}" "${SENTRY_PROJECT:?}"
RELEASE_BASE="${RELEASE_BASE:?}"
RELEASE_CANDIDATE="${RELEASE_CANDIDATE:?}"
HOST="${SENTRY_HOST:-https://sentry.io}"
API="$HOST/api/0/projects/$SENTRY_ORG/$SENTRY_PROJECT/issues/"
REPORT_DIR=".openclaw/reports/$(git rev-parse HEAD)"
mkdir -p "$REPORT_DIR"
fetch_release_page () {
local rel="$1" raw="$2"
code=$(curl -sS -L -o "$raw" -w "%{http_code}" -G "$API" \
--data-urlencode "query=release:${rel}" \
--data-urlencode "statsPeriod=14d" \
--data-urlencode "limit=100" \
-H "Authorization: Bearer ${SENTRY_AUTH_TOKEN}")
[[ "$code" =~ ^2 ]] || { echo "Sentry HTTP $code"; exit 1; }
}
fetch_release_page "$RELEASE_BASE" "$REPORT_DIR/sentry_base.json"
fetch_release_page "$RELEASE_CANDIDATE" "$REPORT_DIR/sentry_candidate.json"
jq -r '.[] | (.fingerprint // ["unknown"]) | join("|")' "$REPORT_DIR/sentry_base.json" | sort -u > "$REPORT_DIR/fp_base.txt"
jq -r '.[] | (.fingerprint // ["unknown"]) | join("|")' "$REPORT_DIR/sentry_candidate.json" | sort -u > "$REPORT_DIR/fp_cand.txt"
comm -13 "$REPORT_DIR/fp_base.txt" "$REPORT_DIR/fp_cand.txt" > "$REPORT_DIR/fp_new.txt"
wc -l "$REPORT_DIR/fp_new.txt" | awk '{print "{\"new_fingerprints\":" $1 "}"}' \
> "$REPORT_DIR/sentry_release_diff.counts.json"
Без fingerprint — .metadata.value или хэш title + culprit. OpenClaw читает sentry_release_diff.counts.json и срезы JSON.
03 Таблица правил кластеризации ошибок
Кластеризация задаёт приоритеты смоука; правила сверху вниз, первое совпадение побеждает.
| Приоритет | Сигнал | Кластер | Смоук-ответ |
|---|---|---|---|
| P1 | Новый отпечаток к RELEASE_BASE при count > N |
new_mass |
Стоп promote; расширить выборку в Sentry |
| P2 | ChunkLoadError, динамический import |
bundle_split |
CDN, версии ассетов, жёсткое обновление |
| P2 | Транзакции checkout/payment или тег feature:payments |
revenue |
Сквозной смоук оплаты на staging |
| P3 | Тег browser.name Safari / стек WebKit |
webkit |
Смоук Safari на том же Mac |
| P3 | Culprit: коллбек авторизации, refresh сессии | session |
Вход, выход, обновление токена |
| P4 | Прочие новые низкообъёмные | misc_new |
Выборочная проверка + тикет в бэклог |
clusters.json без правки curl-обёртки.04 Вывод пунктов смоук-чек-листа
Строки чек-листа: сценарий, код кластера, blocking. Файлы sentry_smoke_checklist.json и .md для агента и ревью.
- Блокирующие: P1
new_massили P2revenueвыше бюджета ошибок. - Информационные: P4
misc_newс владельцем и принятым риском. - Трассируемость: в шапке —
RELEASE_CANDIDATE, git SHA, шаблон ссылки на поток issues в Sentry.
{
"release": "[email protected]",
"commit": "abc1234",
"items": [
{ "id": 1, "cluster": "bundle_split", "blocking": true,
"action": "Главная → ленивый маршрут без ошибок чанка" },
{ "id": 2, "cluster": "webkit", "blocking": false,
"action": "Safari: модал настроек, сохранение" }
]
}
05 FAQ: права доступа и ограничение частоты запросов
Скоупы: org/project:read; при усечённых телах — event:read по тарифу. Без admin.
429: Retry-After, без параллели в одном job, кэш NDJSON в шаге.
Self-hosted: SENTRY_HOST, доверие к CA, таймаут прокси > curl --max-time.
Mac: один агент для WebKit и Sentry — единый таймлайн аудита.
Read-only Sentry, jq-diff, таблица кластеров и JSON чек-листа дают повторяемый предрелизный контур; узкие скоупы и лимиты держат интеграцию предсказуемой.
Главная · Покупка / аренда · Помощь · Блог
Sentry-гейт рядом со смоуком в Safari
Арендуйте Apple Silicon под OpenClaw, скрипты Sentry и WebKit в одном контуре. Откройте главную, оформление покупки, справку и доступ или другие статьи блога — тарифы и помощь доступны без обязательного входа.