---
title: "CI и уведомления"
id: "2073"
type: "page"
slug: "ci"
published_at: "2026-09-28T14:42:03+00:00"
modified_at: "2026-09-28T14:59:37+00:00"
url: "https://pastukhov.com/agents/test/docs/ci"
markdown_url: "https://pastukhov.com/agents/test/docs/ci.md"
excerpt: "Сборочному конвейеру нужно самому понимать, можно ли двигаться дальше, не заглядывая в интерфейс продукта. Для…"
---

# CI и уведомления

[https://pastukhov.com/agents/test/docs/ci.md](https://pastukhov.com/agents/test/docs/ci.md)

Сборочному конвейеру нужно самому понимать, можно ли двигаться дальше, не заглядывая в интерфейс продукта. Для этого есть вычисляемый статус проверки, инструмент командной строки и уведомления о том, что требуется решение человека.

Главное правило здесь одно: проверка даёт доказательства, а решение остаётся за человеком. Ни один флаг, ключ или скрипт этого не меняет.

## Статус проверки

Статус не хранится готовым, а пересчитывается заново при каждом чтении по живым данным:

- **Ожидание** — изменённые снимки ждут решения человека.
- **Провал** — есть упавшие сборки, отклонённые снимки или сорвавшиеся сравнения.
- **Успех** — только после того, как отличия одобрены.

Отдельно и честно: сборка, не выбравшая ни одной проверки, — это **провал**, а не автоматическое прохождение. Пустой список проверок никогда не считается успехом.

## Текст проверки

Вместе со статусом всегда идёт текст проверки: что именно было выбрано в сборке и любое переопределение с именем автора и причиной. Ответ на запрос конвейера, комментарий к запросу на слияние и машинный адрес отдают одно и то же — расхождений между ними не бывает, потому что все трое считают по одним и тем же данным.

## Комментарий к запросу на слияние

Перед слиянием конвейер оставляет комментарий со списком всех снимков, ждущих решения. Человеку не нужно искать их по интерфейсу: он открывает сборку по ссылке из комментария и выносит вердикты.

## Командная строка (viz)

То же самое доступно из командной строки: запустить сборку и дождаться вердикта, посмотреть состояние, получить список «что ждёт решения», запросить правки или починку, выгрузить и загрузить эталоны, опубликовать ссылку, прочитать статус проверки, посмотреть настройки и загрузить снимок из другого инструмента. Инструменту не нужны ни установка, ни сборка — это простой файл для запуска.

Коды завершения — это и есть договор с конвейером:

- **0** — прошло.
- **7** — прошло, но требуется решение человека.
- **8** — провал.

Флаг машинного вывода даёт те же факты в виде данных, а не текста, — удобно для разбора в скриптах. И самое важное: команды «одобрить» не существует. Инструмент может попросить правки, открыть задачу и показать, что человек мог бы принять одним нажатием, но само принятие — только в браузере и только руками человека. Это не ограничение, которое можно снять другим ключом.

## Переопределение

Иногда красную проверку нужно осознанно обойти — например, когда отличие известно и выпуск не ждёт. Тогда указывается причина, и она обязательна. Вычисленные вердикты при этом остаются: в тексте проверки появляется «обойдено пользователем …» с причиной, поэтому обход всегда видно. Обойти можно только завершённую сборку, и действие это доступно лишь администратору.

## Уведомления

Уведомления уходят на заданный адрес по событиям. По умолчанию включены два: «требуется ревью» и «сборка упала». Доступны ещё два — «ссылка опубликована» и «открыт запрос к человеку». У события «требуется ревью» есть порог по количеству отличий: отличие в один пиксель никого не разбудит.

Неудачные доставки повторяются, а журнал доставок показывает, что отправлено и что не удалось. Если публичный адрес продукта не задан, ссылки в уведомлении честно остаются относительными — открыть их снаружи можно только с того же сервера. Если адрес не отвечает, уведомления приостанавливаются, но само тестирование продолжает работать.

Дальше: кто выполняет сборки и что показывает раздел эксплуатации — в разделе [Операции и работоспособность](/agents/test/docs/ops)
.

[← Оглавление документации](/agents/test/docs)
